如何在Heroku上为已部署的Flask应用运行后台Python脚本?
在Heroku上同时运行Flask应用和后台爬取脚本的方案
完全可以实现,核心是利用Heroku的多进程管理机制,具体操作如下:
编写Procfile定义进程
在项目根目录创建一个无后缀的Procfile文件,分别定义Flask的web进程和爬取脚本的worker进程:web: gunicorn your_flask_entry:app worker: python your_scraper_script.py替换
your_flask_entry为你的Flask入口文件名(比如入口是app.py就写app),your_scraper_script.py为你的爬取脚本文件名。启动worker进程
部署项目后,Heroku默认只会启动web进程,你需要手动开启worker实例:heroku ps:scale worker=1这条命令会启动1个worker进程和web进程同时运行,你可以通过
heroku ps查看所有运行中的进程状态。注意文件系统的坑
Heroku的文件系统是临时的,任何进程重启(比如自动扩容、部署更新)后,本地存储的文件都会被清空。如果你的爬取数据需要持久化给Flask应用调用,别存在本地,改用数据库(比如Heroku PostgreSQL)、Redis或者对象存储来存数据。可选:定时执行爬取
如果你的爬取不需要持续后台运行,只是定期执行,可以用Heroku Scheduler组件,设置定时任务来触发爬取脚本,这样能节省worker资源。
内容的提问来源于stack exchange,提问作者cmw
相关产品推荐
相关产品推荐

