uWSGI和gevent环境中只有一个后台任务实例

时间:2014-08-03 03:33:19

标签: python uwsgi gevent

以下是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应用程序之间共享一些变量,并防止后台作业的多个副本。

1 个答案:

答案 0 :(得分:0)

当你处于非懒惰模式时," spawn()"功能只由主人调用,所以你是安全的。如果由于某种原因你需要转到--lazy-apps模式,只需使用uwsgi.worker_id()函数来知道当前正在运行的工作者,所以你可以这样做:

# spawn only if i am worker 1
if uwsgi.worker_id() == 1: spawn()