python rq加载烧瓶应用程序添加到队列中的每个请求

问题描述

Am通过flask应用程序托管API,以及-

  1. 在顶部奔跑的是2名枪手工人
  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 (将#修改为@)