我想知道重新启动Celery的最佳方式是什么,而不会丢失任何任务。
我目前正在使用celery提供的init.d /脚本将其作为守护进程运行 – 一切正常。
尽pipe如此,我还是需要重新启动它(我认为?)才能看到代码更新。 我担心的是,如果有人上传照片,我们想在5秒钟左右的时间内对其进行处理,芹菜重新启动,任务将永远丢失,我们将开始看到奇怪的问题。
有没有build议的方式来重新加载芹菜代码,同时没有丢失任何交易?
谢谢,
菲尔
您可以安全地重新启动芹菜工,而不会丢失任何TERM信号的任务。 芹菜将结束当前的任务并死亡。
如果您希望在出现问题时重试任务,则还可以使用acks_late选项(Task.acks_late / CELERY_ACKS_LATE)。
问:我怎样才能安全地closures工人? (来自http://celery.readthedocs.org/en/latest/faq.html#how-can-i-safely-shut-down-the-worker )
答:使用TERM信号,工作人员将完成所有正在执行的作业,并尽快closures。 不应该丢失任何任务。
你不应该用KILL信号(-9)阻止工人,除非你试了几次TERM,等了几分钟让它有机会closures。 就好像你所做的任务可能会在执行中止,而且除非你设置了acks_late选项(Task.acks_late / CELERY_ACKS_LATE),否则它们将不会被重新运行。
要阻止工作人员(来自http://celery.readthedocs.org/en/latest/userguide/workers.html#worker-stopping )
问:阻止工人
关机应该使用TERM信号完成。
要发送TERM信号,请使用linux命令KILL(来自http://linux.about.com/od/commands/l/blcmdl1_kill.htm )
kill – 终止进程概要
杀死[-s信号| -p] [-a] [ – ] pid … kill -l [signal]说明
命令kill将指定的信号发送到指定的进程或进程组。 如果没有指定信号,则发送TERM信号。 TERM信号将终止不捕获该信号的进程。 对于其他进程,可能需要使用KILL(9)信号,因为这个信号不能被捕获。