gpt4 book ai didi

python - 使用 pytest 同时运行 celery 任务

转载 作者:行者123 更新时间:2023-12-04 12:34:29 28 4
gpt4 key购买 nike

我正在尝试在我的 Django 应用程序中集成测试并发 celery 任务。在 pytest 集成测试期间,我希望任务实际上在工作人员上同时运行,但我无法完成这项工作。

假设我有以下基本的 celery 任务:

@shared_task
def sleep_task(secs):
print(f"Sleeping for {secs} seconds...")
for i in range(secs):
time.sleep(i)
print(f"\t{i + 1}")
return "DONE"

在脚本中同时运行任务效果很好:

# script
sleep_task.delay(3)
sleep_task.delay(3)

# output
Sleeping for 3 seconds...
Sleeping for 3 seconds...
1
1
2
2
3
3

但是,我无法在单元测试中复制这种异步行为。在 conftest.py 中,我设置了代理和结果后端:

import pytest

pytest_plugins = ("celery.contrib.pytest",)

@pytest.fixture(scope="session")
def celery_config():
return {"broker_url": "memory://", "result_backend": "rpc://"}

这是我的单元测试。 celery_session_appcelery_session_worker 设置用于测试的 celery 应用程序和工作程序 (docs):

def test_concurrent_sleep_tasks(celery_session_app, celery_session_worker):
sleep_task.delay(3)
sleep_task.delay(3)

# output
Sleeping for 3 seconds...
1
2
3
Sleeping for 3 seconds...
1
2
3

看起来任务正在同步运行。无论如何异步运行任务?

最佳答案

celery_session_worker fixture 正在启动 celery worker并发性为 1。这是在 celery.contrib 中硬编码的,目前不可配置。由于并发度为 1,因此一次只会处理 1 个任务。

另一种解决方案是编写您自己的 fixture 以启动并发为 2 或更多的 worker。

关于python - 使用 pytest 同时运行 celery 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66177414/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com