我想要实现的是运行python一些脚本,它将收集数据并在后台将其插入到DB中。 所以基本上,一个人打开Django视图,点击一个按钮然后关闭浏览器,Django在服务器上启动这个脚本,然后脚本在后台收集数据,而其他一切都是自己的。
实现此类功能的最佳库,框架,模块或包是什么?
答案 0 :(得分:5)
Celery是此类任务最常用的工具。
答案 1 :(得分:2)
Celery是一个很好的建议,但它有点沉重的解决方案,除非你需要芹菜的全部功能,否则会有更简单直接的解决方案。
所以我建议使用rq和django integration of rq。
RQ的灵感来自Celery,Resque的优秀部分,并且已被创建为Celery或其他基于AMQP的排队实施的轻量级替代品。
答案 2 :(得分:2)
我谦虚地推荐标准库模块multiprocessing
。只要后台进程可以在处理请求的服务器上运行,您就可以了。
虽然我认为这是最简单的解决方案,但这根本不会很好地扩展,因为您在服务器上运行了额外的处理。如果您希望这些事情偶尔发生一次,而不是持续那么久,那么这是一个很好的快速解决方案。
要注意的一件事是:在新启动的进程中 ALWAYS 在执行任何操作之前关闭数据库连接 - 这是因为分叉进程与SQL服务器共享相同的连接并可能进入数据与你的主django进程竞争。