【问题标题】:Why celery not executing parallelly in Django?为什么芹菜不能在 Django 中并行执行?
【发布时间】:2021-07-07 13:53:00
【问题描述】:

我的芹菜有问题,我会用代码解释

def samplefunction(request):
    print("This is a samplefunction")
    a=5,b=6
    myceleryfunction.delay(a,b)
    return Response({msg:" process execution started"}



@celery_app.task(name="sample celery", base=something)
def myceleryfunction(a,b):
    c = a+b
    my_obj = MyModel()
    my_obj.value = c
    my_obj.save()

在我的情况下,一个人叫芹菜它会很好地工作

如果很多人通过请求,它会一个一个处理

所以想象一下我的 celery 函数“myceleryfunction”需要 3 分钟才能完成后台任务。

所以如果同时有 10 个请求,最后一个需要 30 分钟延迟才能完成输出

如何解决此问题或任何其他替代方法。

谢谢

【问题讨论】:

  • 你运行 celery 的并发设置是什么?你有多少芹菜工人?

标签: django celery


【解决方案1】:

我假设您正在运行一个带有default settings 的工人。 这将使工作人员使用worker_pool=preforkworker_concurrency=<nr of CPUs> 运行

如果运行它的机器只有一个 CPU,你将不会得到任何并行运行的任务。

要获得并行化,您可以:

  1. worker_concurrency 设置为> 1,这将在同一个worker 中使用多个进程。
  2. start additional workers
  3. 使用celery multi 启动多个worker
  4. 在 docker 容器中运行 worker 时,添加容器的副本

请参阅Concurrency 了解更多信息。

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 2020-11-03
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    相关资源
    最近更新 更多