gpt4 book ai didi

python - 是否可以通过累积计划任务来死锁 worker ?

转载 作者:行者123 更新时间:2023-11-28 17:47:36 25 4
gpt4 key购买 nike

按代码:

@celery.task()
def some_recursive_task():
# Do some stuff and schedule it to run again later
# Note that the next run is not scheduled in a fixed basis, like crontabs
# but based on history of some object
# Actual task is found here:
# https://github.com/rafaelsierra/cheddar/blob/master/src/feeds/tasks.py#L39
# Then it call himself again
countdown = bla.get_countdown()
some_recursive_task.apply_async(countdown=countdown)

此任务将在接下来的 10 分钟 12 小时内运行,但此任务还调用另一个应该现在运行的任务,one for downloading东西和其他to parse it .

问题是数据库中的每条记录都会调用 main 函数,我们假设有几百个任务在运行,但是,考虑到这些任务平均每隔几个小时运行一次,任务量并不是什么大问题。

当我尝试用一​​个工作人员运行它时,问题就开始了,当我启动工作人员时,我把它运行所有队列并设置 8 个并发工作人员,然后它开始确认任务,但似乎,无论任务设置在多远的 future ,一个工作人员都会得到它并等待它的预定运行,这意味着这个工作人员在此之前被锁定。

我知道我可以将其他两个功能拆分到不同的队列中,我已经这样做了,但我担心的是工作人员会提前 12 小时确认任务运行,而不会在 30 分钟内运行它应该运行的任务。

难道工作人员不应该忽略预定的任务直到它的时间并运行那些没有时间延迟的任务吗?

我不认为,或者不知道如何,periodic tasks是一个解决方案。

最佳答案

参见第 5 点和第 6 点 there .请记住,countdown 与任务的 eta 参数没有区别。

简而言之,你是对的。单个工作人员(或任何数量的工作人员)不应阻塞计划(etacountdown)任务。

您如何判断工作人员已锁定? 计划的任务从队列中预取,但在执行前不会被确认。

此外,请记住所有计划的任务在执行前都保存在 RAM 中。您希望它们尽可能轻。据我了解,计划的 任务不会传递大块数据,可能只是一些URI,所以这应该不是问题。

您粘贴的链接返回 404。您确定 cheddar 不是私有(private)存储库吗?

关于python - 是否可以通过累积计划任务来死锁 worker ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15734433/

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