芹菜组按顺序而不是并行运行任务
celery group runs tasks sequentially instead of in parallel
我正在学习celery组函数
@celery_app.task
def celery_task():
import time
time.sleep(30)
print('task 1')
@celery_app.task
def celery_task2():
import time
time.sleep(10)
print('task 2')
@celery_app.task
def test():
from datetime import datetime
print(datetime.now())
job = group(
celery_task.s(),
celery_task2.s()
)
result = job()
result.get()
print(datetime.now())
但是,当我从 python 控制台 运行ning test()
并在 celery 日志中查看它们时,似乎 task1 是 运行 然后 task2 是运行。
不应该是运行并行吗?整个 test()
函数用了 30 秒才完成
为了启动我的 celery worker,我使用命令 celery -A tasks worker -l=INFO
你确定整个test()
花了30秒吗?如果是这样,我不明白这是什么问题?如果它不是平行的——它必须花费 30s+10s=40s。
这里有两件事:
- 当你 运行 你的工作器时使用
--concurrency
标志,这样它就可以处理多个任务。或者,使用多个 worker(运行 两个进程):
celery -A tasks worker -l=INFO --concurrency=4
(我不确定默认值是什么 - 我想是那个)。
- 运行 您的 canvas 与
job.delay()
或 job. apply_async()
异步到 运行 异步。
我正在学习celery组函数
@celery_app.task
def celery_task():
import time
time.sleep(30)
print('task 1')
@celery_app.task
def celery_task2():
import time
time.sleep(10)
print('task 2')
@celery_app.task
def test():
from datetime import datetime
print(datetime.now())
job = group(
celery_task.s(),
celery_task2.s()
)
result = job()
result.get()
print(datetime.now())
但是,当我从 python 控制台 运行ning test()
并在 celery 日志中查看它们时,似乎 task1 是 运行 然后 task2 是运行。
不应该是运行并行吗?整个 test()
函数用了 30 秒才完成
为了启动我的 celery worker,我使用命令 celery -A tasks worker -l=INFO
你确定整个test()
花了30秒吗?如果是这样,我不明白这是什么问题?如果它不是平行的——它必须花费 30s+10s=40s。
这里有两件事:
- 当你 运行 你的工作器时使用
--concurrency
标志,这样它就可以处理多个任务。或者,使用多个 worker(运行 两个进程):celery -A tasks worker -l=INFO --concurrency=4
(我不确定默认值是什么 - 我想是那个)。 - 运行 您的 canvas 与
job.delay()
或job. apply_async()
异步到 运行 异步。