Heroku WORKER Dyno(在python环境中运行)在30分钟后进入睡眠状态。 该工作人员执行“芹菜期”任务计划,以向用户发送电子邮件。
这里显示了实际行为的日志”:
2019-05-29T12:49:02.273852+00:00 heroku[web.1]: Idling
2019-05-29T12:49:02.278946+00:00 heroku[web.1]: State changed from up to down
2019-05-29T12:49:02.288616+00:00 heroku[worker.1]: Idling
2019-05-29T12:49:02.306209+00:00 heroku[worker.1]: State changed from up to down
2019-05-29T12:49:03.087205+00:00 heroku[worker.1]: Stopping all processes with SIGTERM
2019-05-29T12:49:03.101608+00:00 app[worker.1]:
2019-05-29T12:49:03.101688+00:00 app[worker.1]: worker: Warm shutdown (MainProcess)
2019-05-29T12:49:03.185191+00:00 app[worker.1]: [2019-05-29 12:49:03,184: INFO/MainProcess] beat: Shutting down...
2019-05-29T12:49:03.297659+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2019-05-29T12:49:03.324661+00:00 app[web.1]: [2019-05-29 12:49:03 +0000] [4] [INFO] Handling signal: term
2019-05-29T12:49:03.326185+00:00 app[web.1]: [2019-05-29 12:49:03 +0000] [11] [INFO] Worker exiting (pid: 11)
2019-05-29T12:49:03.326993+00:00 app[web.1]: [2019-05-29 12:49:03 +0000] [10] [INFO] Worker exiting (pid: 10)
2019-05-29T12:49:03.626898+00:00 app[web.1]: [2019-05-29 12:49:03 +0000] [4] [INFO] Shutting down: Master
2019-05-29T12:49:03.758456+00:00 heroku[web.1]: Process exited with status 0
2019-05-29T12:49:04.817520+00:00 heroku[worker.1]: Process exited with status 0
根据研究,我了解到web
dyno会进入睡眠状态,但是worker
dyno不会进入睡眠状态。
https://devcenter.heroku.com/articles/free-dyno-hours:
网络:
如果某个应用具有免费的网络测功机,并且该测功机在30分钟内未收到任何网络流量,则它将休眠。
警告注意:工人dynos不会睡觉,因为它们不响应Web请求。请注意这一点,因为它们可能会以24/7的速度运行并消耗您的时间。
我原本希望网络闲置(约250小时),而全24/7的运行Celery beat的工人(约750小时)将主要用于计划。
到目前为止,我已激活:https://uptimerobot.com/,并在5分钟内ping到网络dyno,以使其保持运行状态,但是长达一个月的时间不足。有了这两个测功者似乎保持清醒。
有什么想法为什么会这样? 可能的解决方案?
答案 0 :(得分:1)
目前,您的两个程序都使用您帐户中共享的“小时池”中的小时。如果您有正常运行时间的机器人每5分钟对您的Web dyno进行一次ping(这意味着它没有时间入睡,并且只要正常运行时间的机器人都在运行,它就会一直处于运行状态),而您的dyno则每天24/7正常运行,那么您根本就不会即使您保存了信用卡,也可以免费24/7全天候运行它们。如果您不断ping网络测功机,它就不会闲着。
我不完全确定您将从何处获得250个小时的数字,但如果要并行运行这些图形,则必须让其中一个测功机入睡。目前,由于正常运行时间的机器人,这种情况没有发生,因此您可能每月尝试使用1460/1000 dyno小时,并关闭dynos。