在 Celery 中,可以使用 @task
装饰器定义一个阻塞任务。然后,可以使用 group
函数来并行执行多个任务,并通过 get
方法阻塞直到所有任务完成。
下面是一个示例代码:
from celery import Celery, group
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task
def long_running_task(number):
# 模拟一个耗时任务
import time
time.sleep(5)
return number * 2
if __name__ == '__main__':
celery_tasks = group(
long_running_task.s(1),
long_running_task.s(2),
long_running_task.s(3)
)
result = celery_tasks.apply_async()
# 阻塞直到所有任务完成
result.get()
在上面的示例中,我们定义了一个名为 long_running_task
的阻塞任务,该任务会休眠 5 秒钟,然后返回传入的数字乘以 2。
然后,我们使用 group
函数创建一个包含多个任务的任务组,每个任务传入不同的参数。
接下来,我们调用 apply_async
方法来异步执行任务组,并将返回的结果保存在 result
变量中。
最后,我们使用 result.get()
来阻塞直到所有任务完成。这样,我们就实现了并行执行的 Celery 阻塞任务。