我正在运行一个API,目前,我正在使用subprocess.Popen
。由于调用的模块是纯python,我的想法是用multiprocessing.Process
或Pull
运行它。请求的处理方式如下:
- 请求到达
Connexion
终结点 - 完成一些预处理
- 该功能使用Popen打开
- 请求返回 200,而不等待 3。 完成
更换时:
Popen(...)
跟
p = Process(target=...)
p.start()
这发生在使用UWSGI 的多处理中:
- 请求到达
Connexion
终结点 - 完成一些预处理
- 该功能通过进程打开
- 请求会立即返回 200,但对同一终结点的第二个请求将需要前 3 个请求才能完成。
如果我在 https://github.com/tiangolo/uwsgi-nginx-flask-docker 上运行它:
。
- 请求等到 3 完成,然后返回 200
如果我使用python -m ...
运行该过程,它会按检查方式工作。
我的 uwsgi.ini看起来像这样
[uwsgi]
module = myapp
callable = app
lazy-apps = true
stats-http = true
http = 127.0.0.1:8080
你的uwsgi.ini应该启用线程,默认情况下,这些线程被阻止。
将其更改为以下内容
[uwsgi]
module = myapp
callable = app
lazy-apps = true
stats-http = true
http = 127.0.0.1:8080
enable-threads = true