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
应用是一个完整的可用例子。