0

我正在使用 Python 的 concurrent.futures 模块(模块版本 2.1.3,Python 版本 2.7.3)。我有 nginx 与 4 个工作进程一起运行,并且 4 个 uWSGI 运行(在 Ubuntu 上精确)作为一个新贵的守护进程,具有以下 uwsgi 配置(注意 enable-threads 是真的,所以 GIL 是可访问的,而惰性是真的):

virtualenv=[ path to venv ]
chdir=[ path to python project ]
enable-threads=true
lazy=true
buffer-size=32768
post-buffering=true
processes=4
master=true
module=[ my app ].wsgi
callable=wsgi_app
logto=/var/log/uwsgi.log
pidfile=[ replaced ]
plugins=python27
socket=[ replaced, but works fine ]

整个应用程序运行良好,但似乎某些缺少的上下文不适用于期货池:当我在没有 future() 的情况下调用 somefunc() 时,一切都很好,但是当我用 future() 调用 somefunc() 时,HTTP 请求 (我正在使用 Flask)在失败之前挂起相当长的一段时间。

日志文件的唯一条目与 HTTP 请求和一般 wsgi 启动内容有关,例如:

WSGI application 0 (mountpoint='') ready on interpreter 0x11820a0 pid: 26980 (default app)

我如何才能对期货执行有一些了解,或者找出期货池可能无法使用的上下文?

那有意义吗?

提前致谢。

4

1 回答 1

2

如果您使用 ProcessPoolExecutor 而不是线程,请确保在您的 uWSGI 选项中添加 close-on-exec,否则将在 fork() 之后继承与客户端/Web 服务器的连接套接字

于 2013-02-20T08:42:13.210 回答