我有一个python大数据项目,在这个项目中我试图使用芹菜和Redis服务器来完成我的任务。问题是,我需要三个不同的队列来完成三个不同的任务,这是我申请芹菜来完成的。
这是我为同时运行这三个任务所做的配置,但是他们使用一个队列一个接一个地执行任务,因此需要花费大量的时间。
from celery import Celery
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
app = Celery("tasks", broker="redis://localhost:6379")
@app.task()
def main(capital,gamma,alpha):
@app.task()
def gain(capital,gamma,alpha):
@app.task()
def lain(capital,gamma,alpha):为了启动芹菜应用程序,我使用了以下代码行
("celery -A task worker --loglevel=info -P eventlet --concurrency=10 -n worker1@%h" , shell=True)
("celery -A task worker --loglevel=info -P eventlet --concurrency=10 -n worker2@%h" , shell=True)
("celery -A task worker --loglevel=info -P eventlet --concurrency=10 -n worker3@%h" , shell=True)这些代码完美地运行了我的应用程序,有三个任务,但我需要为每个任务创建三个独立的队列,这样所有三个任务都可以同时或并行地运行。
这是我的芹菜应用程序看起来像三个任务,但它只使用一个队列,这是默认队列名为芹菜。
-------------- worker1@EC2AMAZ-RTM8UD8 v5.2.3 (dawn-chorus)
--- ***** -----
-- ******* ---- Windows-10-10.0.20348-SP0 2022-03-10 12:59:07
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app: tasks:0x248adf81e80
- ** ---------- .> transport: redis://localhost:6379//
- ** ---------- .> results: disabled://
- *** --- * --- .> concurrency: 10 (eventlet)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
[tasks]
. task.gain
. task.lain
. task.main
[2022-03-10 12:59:07,461: INFO/MainProcess] Connected to redis://localhost:6379//
[2022-03-10 12:59:07,477: INFO/MainProcess] mingle: searching for neighbors
[2022-03-10 12:59:08,493: INFO/MainProcess] mingle: all alone
[2022-03-10 12:59:08,493: INFO/MainProcess] pidbox: Connected to redis://localhost:6379//.
[2022-03-10 12:59:08,493: INFO/MainProcess] worker1@EC2AMAZ-RTM8UD8 ready.因此,请任何人帮助我在芹菜应用程序中为三个不同的任务定义三个不同的队列,任何帮助都将非常感谢:)
发布于 2022-03-10 13:37:51
它应该是简单的添加-Q <queue name>到您运行的这三个芹菜工人。
https://stackoverflow.com/questions/71420471
复制相似问题