uWSGI队列框架

除了 caching framework ,uWSGI还有一个共享队列。

在低层次,它是一个简单的基于块的共享数组,有两个可选的计数器,一个用于对于堆栈式,LIFO,另一个用于FIFO。

数组是环形的,因此,当两个指针的任意一个到达了尾部(或者首部),它会被重置。记住这点!

要启用队列,则使用 queue 选项。默认情况下,队列块是8KiB。使用 queue-blocksize 来修改其大小。

  1. # 100 slots, 8 KiB of data each
  2. uwsgi --socket :3031 --queue 100
  3. # 42 slots, 128 KiB of data each
  4. uwsgi --socket :3031 --queue 42 --queue-blocksize 131072

将队列当成共享数组使用

  1. # Put a binary string in slot 17.
  2. uwsgi.queue_set(17, "Hello, uWSGI queue!")
  3.  
  4. # Get it back.
  5. print uwsgi.queue_get(17)

将队列当成共享堆栈使用

  1. # Push a value onto the end of the stack.
  2. uwsgi.queue_push("Hello, uWSGI stack!")
  3.  
  4. # Pop it back
  5. print uwsgi.queue_pop()
  6.  
  7. # Get the number of the next available slot in the stack
  8. print uwsgi.queue_slot()
  9.  
  10. # Pop the last N items from the stack
  11. items = uwsgi.queue_last(3)

将队列当成一个FIFO队列使用

注解

当前,你只能pull,不能push。要入队一个元素,请使用 uwsgi.queue_set()

  1. # Grab an item from the queue
  2. uwsgi.queue_pull()
  3. # Get the current pull/slot position (this is independent from the stack-based one)
  4. print uwsgi.queue_pull_slot()

注释

  • 你可以通过使用 uwsgi.queue_size 获取队列大小。
  • 使用 queue-store 选项将队列在磁盘上持久化。使用 queue-store-sync (在master循环中 —— 通常是秒) 来强制磁盘同步队列。
  • tests/queue.py 应用是一个完整的可用例子。