Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按名称限制运行芹菜任务的最大数量_Python_Celery_Celery Task - Fatal编程技术网

Python 如何按名称限制运行芹菜任务的最大数量

Python 如何按名称限制运行芹菜任务的最大数量,python,celery,celery-task,Python,Celery,Celery Task,如何限制可以同时运行的特定芹菜任务的实例数 我有一个处理大文件的任务。我遇到了一个问题,用户可能会启动多个任务,导致服务器在一次处理过多文件时CPU和内存不足。我希望确保在任何给定时间只运行这一类型任务的N个实例,并且其他任务将在调度程序中排队,直到其他任务完成 我看到任务装饰器中有一个选项,但我认为这不是我想要的。如果我正确理解了文档,这将限制任务启动的速度,但不会限制正在运行的任务的总数,因此这将使我的服务器崩溃得更慢…但它仍然会崩溃。我不确定你能在芹菜中做到这一点,您可以做的是在请求到达时

如何限制可以同时运行的特定芹菜任务的实例数

我有一个处理大文件的任务。我遇到了一个问题,用户可能会启动多个任务,导致服务器在一次处理过多文件时CPU和内存不足。我希望确保在任何给定时间只运行这一类型任务的N个实例,并且其他任务将在调度程序中排队,直到其他任务完成


我看到任务装饰器中有一个选项,但我认为这不是我想要的。如果我正确理解了文档,这将限制任务启动的速度,但不会限制正在运行的任务的总数,因此这将使我的服务器崩溃得更慢…但它仍然会崩溃。

我不确定你能在芹菜中做到这一点,您可以做的是在请求到达时检查当前正在运行的同名任务的数量,如果超过最大值,则返回错误或添加一种机制,定期检查任务是否有打开的插槽并运行它(如果您添加了这样一种机制,您不需要重复检查,只需在每次请求时将其添加到队列中即可

要检查正在运行的任务,可以使用命令

简言之:

app = Celery(...)
i = app.control.inspect()
i.active()

您可以做的是将这些任务推送到特定队列,并让X个工作人员处理它们。将两个工作人员放在一个包含100个项目的队列上,将确保同时只处理两个任务。

您必须设置额外队列并为其设置所需的并发级别。从:

并启动额外的工作者,仅为有限的队列服务:

$ celery -A celery_app worker -Q limited_queue --loglevel=info -c 1 -n limited_queue
然后,您可以使用或检查命令检查一切运行是否正常:

$ celery -A celery_app worker inspect --help
$ celery -A celery_app worker -Q limited_queue --loglevel=info -c 1 -n limited_queue
$ celery -A celery_app worker inspect --help