持久化后台任务 Django + Heroku
Persistent background task Django + Heroku
我有一个持久的后台进程,目前 运行 正在我的 ubuntu
服务器上作为一个独立的 python 脚本,由 supervisor
管理。但是,我正在迁移到 Heroku
,想知道是否有人有过设置相同类型环境的经验。
脚本规范;
- 从外部获取信息API
- 对数据进行计算
- 将数据存入数据库
- 如果脚本使用时间少于 5 秒,则休眠剩余时间,否则再次运行
我可以 运行 每 5 秒执行一次 cronjob,但有时第 1-3 步可能需要整整一个小时。
有什么建议吗?
谢谢。
您想做的是创建一个工作进程。只需定义一个命令行脚本,以便您可以轻松调用它,然后在您的 Procfile
中添加一个新的工作人员条目,如下所示:
# Procfile
web: python manage.py runserver # example
worker: python manage.py start_cronjob # command to run your background process
一旦你在你的 Procfile
中定义了这个,继续将你的应用程序推送到 Heroku,然后扩展一个工作进程:
$ heroku scale worker=1
这将启动单个工作进程。
要查看日志并确保一切正常,您可以说:
$ heroku logs --tail --ps worker
我有一个持久的后台进程,目前 运行 正在我的 ubuntu
服务器上作为一个独立的 python 脚本,由 supervisor
管理。但是,我正在迁移到 Heroku
,想知道是否有人有过设置相同类型环境的经验。
脚本规范;
- 从外部获取信息API
- 对数据进行计算
- 将数据存入数据库
- 如果脚本使用时间少于 5 秒,则休眠剩余时间,否则再次运行
我可以 运行 每 5 秒执行一次 cronjob,但有时第 1-3 步可能需要整整一个小时。 有什么建议吗?
谢谢。
您想做的是创建一个工作进程。只需定义一个命令行脚本,以便您可以轻松调用它,然后在您的 Procfile
中添加一个新的工作人员条目,如下所示:
# Procfile
web: python manage.py runserver # example
worker: python manage.py start_cronjob # command to run your background process
一旦你在你的 Procfile
中定义了这个,继续将你的应用程序推送到 Heroku,然后扩展一个工作进程:
$ heroku scale worker=1
这将启动单个工作进程。
要查看日志并确保一切正常,您可以说:
$ heroku logs --tail --ps worker