ofe*_*fey 1 python asynchronous celery celery-task
Celery 对任务的 eta 有限制吗?我想foo在 12 天后执行该方法,Celery 会不会有问题?或者我需要为这么长的 eta 配置任何 Celery 设置吗?
next_run = datetime.now() + timedelta(days = 12)
foo.apply_async(args=[], eta = next_run)
Run Code Online (Sandbox Code Playgroud)
这取决于您使用的代理和一些配置,例如visibility_timeout.
当设置了 ETA 的任务入队时,它会由工作人员尽快获取,而不是在 ETA 时获取。worker 持有任务直到 ETA 并执行它。工人在处理任务时确认经纪人;所以代理知道什么时候可以安全地删除任务消息。
一些代理,如 Redis 和 SQS,认为如果某个任务在一段时间内没有被工作人员确认就会丢失,这称为visibility_timeout。在这种情况下,它允许另一个工作人员获取任务消息。
回到您的情况,如果您使用 Redis,它的默认visibility_timeout值为 1 小时,则将任务延迟 12 天可能最终会多次执行该任务,例如 12 * 24 次,具体取决于您的工作人员数量。
增加到visibility_timeout12 天以上可能很诱人。请注意,它有效地禁用了确认机制,这是有充分理由的。
我建议您使用以 间隔运行的 cron 任务visibility_timeout来扫描应该很快执行的任务,并将它们排入实际的 ETA 队列。
参考:
| 归档时间: |
|
| 查看次数: |
758 次 |
| 最近记录: |