以下是WSGI应用示例:
# coding: utf-8
from gevent import spawn, sleep, monkey; monkey.patch_all()
def app(environ, start_response):
data = "OK\n"
start_response("200 OK", [
("Content-Type", "text/plain"),
("Content-Length", str(len(data)))
])
return iter([data])
def background_task():
while True:
sleep(2)
print 'Working...'
spawn(background_task)
使用带有以下参数的uwsgi:
uwsgi --gevent 1000 --processes 4 --module app --callable app --master --socket /tmp/uwsgi.sock
问题是如何为多个uWSGI进程只生成一个后台工作进程实例。我需要使用4个uwsgi进程才能达到所需的性能。主要思想是在后台任务和WSGI应用程序之间共享一些变量,并防止后台作业的多个副本。
答案 0 :(得分:0)
当你处于非懒惰模式时," spawn()"功能只由主人调用,所以你是安全的。如果由于某种原因你需要转到--lazy-apps模式,只需使用uwsgi.worker_id()函数来知道当前正在运行的工作者,所以你可以这样做:
# spawn only if i am worker 1
if uwsgi.worker_id() == 1: spawn()