gpt4 book ai didi

python - 为什么 gUnicorn 在运行 Flask 时生成 2 个进程

转载 作者:行者123 更新时间:2023-11-28 16:33:56 35 4
gpt4 key购买 nike

我正在运行一个基本上从 Twitter 中提取推文的 Flask 应用程序。虽然使用嵌入式 Flask 服务器运行应用程序没有问题,但在 gUnicorn 中运行时我收到重复的推文,主要是因为我有 2 个线程接收来自 Twitter 的回调。

例如,如果我使用

启动我的应用程序

python 应用程序.py

当收到推文时,我得到了这个预期的输出,看到我在记录器输出中附加了线程信息(第一个参数):

140721974449920 2015-03-12 17:59:13,030 INFO: Got message from streaming Twitter API! [in /home/mosquito/git/opencoast_streamer/app.py:83]
140721974449920 2015-03-12 17:59:14,646 INFO: Got message from streaming Twitter API! [in /home/mosquito/git/opencoast_streamer/app.py:83]
140721974449920 2015-03-12 17:59:49,031 INFO: Got message from streaming Twitter API! [in /home/mosquito/git/opencoast_streamer/app.py:83]

如您所见,时间戳看起来也有效,检查我存储它的 mongo 集合,我发现文档是正确的。然后,如果我使用 gunicorn 启动应用程序:

gunicorn app:app -b localhost:8000 --debug

然后查看日志,我可以看到有 2 个不同的线程正在获取数据:

139883969844992 2015-03-12 17:52:05,104 INFO: Got message from streaming Twitter API! [in /home/mosquito/git/opencoast_streamer/app.py:83]
139883961452288 2015-03-12 17:52:05,106 INFO: Got message from streaming Twitter API! [in /home/mosquito/git/opencoast_streamer/app.py:83]
139883969844992 2015-03-12 17:53:36,480 INFO: Got message from streaming Twitter API! [in /home/mosquito/git/opencoast_streamer/app.py:83]
139883961452288 2015-03-12 17:53:36,481 INFO: Got message from streaming Twitter API! [in /home/mosquito/git/opencoast_streamer/app.py:83]

如您所见,发生了一些奇怪的事情......然后我去查看并检查了 gunicorn:

ps aux | grep gunicorn

mosquito 25035 3.1 0.3 54612 12516 pts/1 S 15:31 0:01 /home/mosquito/www/env/bin/python /home/mosquito/www/env/bin/gunicorn app:app -b localhost:8000
mosquito 25606 0.0 0.4 66904 17016 pts/1 R 15:32 0:00 /home/mosquito/www/env/bin/python /home/mosquito/www/env/bin/gunicorn app:app -b localhost:8000
mosquito 25610 0.0 0.0 13220 956 pts/3 S+ 15:32 0:00 grep --color=auto gunicorn

因此,我开始认为这与 gUnicorn 有关...知道为什么 gUnicorn 正在为我的 Flask 应用生成 2 个进程吗?

谢谢!

最佳答案

我相信这不是 gUnicorn 的错,而是 Werkzeug 的预期行为。 Werkzeug 有一个“重新加载”进程,用于监视文件更改(如果它检测到 .py 文件发生更改,则会重新加载。

有关重新加载器的更多信息 go here .

为了让您度过难关,我相信将 use_reloader=False 添加到您对 app.run 的调用中:app.run(use_reloader=False) 就可以了。

你也可以看到这个SO answer获取更多信息。

关于python - 为什么 gUnicorn 在运行 Flask 时生成 2 个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29016178/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com