我在使用简单的多线程功能并在我的网络应用程序中运行时遇到了一些麻烦。
我在Ubuntu 12.04上使用Flask,uwsgi,nginx。
每次启动新线程时,在关闭uwsgi服务器之前都不会执行。很奇怪!
如果我正在执行一项简单的任务(例如打印),它将按预期执行9/10次。如果我执行繁重的计算工作(例如文件上的OCR),当服务器重新启动(执行关闭)时,它将始终开始执行
知道为什么我的代码没有按预期执行?
代码:
def hello_world(world):
print "Hello, " + world # This will get printed when the uwsgi server restarts
def thread_test():
x = "World!"
t = threading.Thread(target=hello_world, args=(x,))
t.start()
@application.route('/api/test')
def test():
thread_test()
return "Hello, World!", 200
编辑1:
我的uwsgi配置如下所示:
[uwsgi]
chdir = /Users/vingtoft/Documents/Development/archii/server/archii2/
pythonpath = /Users/vingtoft/Documents/Development/archii/server/archii2/
pythonpath = /Users/vingtoft/Documents/Development/archii/server/ml/
module = app.app:application
master = True
vacuum = True
socket = /tmp/archii.sock
processes = 4
pidfile = /Users/vingtoft/Documents/Development/archii/server/archii2/uwsgi.pid
daemonize = /Users/vingtoft/Documents/Development/archii/server/archii2/uwsgi.log
virtualenv = /Users/vingtoft/Documents/Development/virtualenv/flask/
wsgi-file = /Users/vingtoft/Documents/Development/archii/server/archii2/app/app.py
ssl = True
答案 0 :(得分:2)
threads = 2 # or any greater number
或
enable-threads = true
但要警告第一种方法会告诉uWSGI为每个工作人员创建2个线程,这样对于4名工作人员,最终会得到8个实际线程。 / p>
线程将作为单独的worker工作,因此它们不适合用于后台作业,但使用大于1的任意数量的线程将为uWSGI服务器启用线程支持,因此现在您可以为某些后台创建更多线程任务。