uWSGI队列框架
除了 caching framework ,uWSGI还有一个共享队列。
在低层次,它是一个简单的基于块的共享数组,有两个可选的计数器,一个用于对于堆栈式,LIFO,另一个用于FIFO。
数组是环形的,因此,当两个指针的任意一个到达了尾部(或者首部),它会被重置。记住这点!
要启用队列,则使用 queue
选项。默认情况下,队列块是8KiB。使用 queue-blocksize
来修改其大小。
- # 100 slots, 8 KiB of data each
- uwsgi --socket :3031 --queue 100
- # 42 slots, 128 KiB of data each
- uwsgi --socket :3031 --queue 42 --queue-blocksize 131072
将队列当成共享数组使用
- # Put a binary string in slot 17.
- uwsgi.queue_set(17, "Hello, uWSGI queue!")
- # Get it back.
- print uwsgi.queue_get(17)
将队列当成共享堆栈使用
- # Push a value onto the end of the stack.
- uwsgi.queue_push("Hello, uWSGI stack!")
- # Pop it back
- print uwsgi.queue_pop()
- # Get the number of the next available slot in the stack
- print uwsgi.queue_slot()
- # Pop the last N items from the stack
- items = uwsgi.queue_last(3)
将队列当成一个FIFO队列使用
注解
当前,你只能pull,不能push。要入队一个元素,请使用 uwsgi.queue_set()
。
- # Grab an item from the queue
- uwsgi.queue_pull()
- # Get the current pull/slot position (this is independent from the stack-based one)
- print uwsgi.queue_pull_slot()
注释
- 你可以通过使用
uwsgi.queue_size
获取队列大小。 - 使用
queue-store
选项将队列在磁盘上持久化。使用queue-store-sync
(在master循环中 —— 通常是秒) 来强制磁盘同步队列。 tests/queue.py
应用是一个完整的可用例子。