问题描述
Am通过flask应用程序托管API,以及-
- 在顶部奔跑的是2名枪手工人
- 烧瓶任务使用2个rq工作器排队
首先,我启动了2个Gunicorn工人,我得到了此消息-
2020-10-29 07:54:21,992 : INFO : app : 140162149197632 : 17641 : Started app.py!
2020-10-29 07:54:22,078 : INFO : app : 140162149197632 : 17643 : Started app.py!
然后我启动2个rq工人-
2020-10-29 07:55:21,880 : INFO : rq.worker : 140051755202368 : 17743 : *** Listening on default...
2020-10-29 07:55:21,885 : INFO : rq.worker : 140281306085184 : 17746 : *** Listening on default...
但是当我向api发送请求时,我的日志显示-
2020-10-29 07:56:12,511 : INFO : app : 140162149197632 : 17643 : app.views : Added to queue. 0 tasks in the queue
2020-10-29 07:56:12,514 : INFO : rq.worker : 140051755202368 : 17743 : default: app.tasks.run_detections({'module': '_all_','folder_name': 'CL201029-d7794130-5375-44f6-8334-da9bc7...) (dc319268-c696-4a9c-95a3-1a7843f12ef8)
2020-10-29 07:56:12,719 : INFO : app : 140051755202368 : 17801 : Started app.py!
^在这里,该应用程序再次被初始化。
日志格式为-'%(asctime)s:%(levelname)s:%(name)s:%(thread)d:%(process)d:%(message)s'
我的问题是,将任务添加到队列后,在同一线程中(140051755202368)创建了另一个pid,并再次初始化了烧瓶。
为什么会这样?我想在一开始就在所有工作人员中预加载该应用,而不是在每次请求到来时都加载它们。
我在这里想念什么?
我的代码结构-
app
1. __init__.py
2. views.py
3. tasks.py
我以->
gunicorn -b 0.0.0.0:5000 run:app --workers 2
worker.py
import sys
from rq import Queue,Connection,Worker
import logging
logger = logging.getLogger("rq.worker")
file_handler = logging.FileHandler('worker.log')
formatter = logging.Formatter('%(asctime)s : %(levelname)s : %(name)s : %(thread)d : %(process)d : %(message)s')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
with Connection():
qs = Queue()
w = Worker(qs)
w.work()
supervisord.conf-用于运行RQ工人
[supervisord]
[program:worker]
command=python worker.py
numprocs=2
然后跑步
supervisord -n
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)