我正在为用户创建一个小仪表板,以便他能够运行特定的工作.我正在使用Django所以我希望他能够单击一个链接来启动作业,然后将页面返回给他,并显示作业正在运行的消息.该工作的结果将在稍后通过电子邮件发送给他.
我相信我应该使用,subprocess.Popen
但我不确定.所以在伪代码中,这就是我想要做的:
if job == 1: run script in background: /path/to/script.py return 'Job is running'
nosklo.. 61
p = subprocess.Popen([sys.executable, '/path/to/script.py'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
这将在后台启动子进程.您的脚本将继续正常运行.
阅读此处的文档.
p = subprocess.Popen([sys.executable, '/path/to/script.py'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
这将在后台启动子进程.您的脚本将继续正常运行.
阅读此处的文档.
如果您正在考虑长期扩展,那么通过消息队列运行它绝对是可行的方法.将消息发送到后台不断运行的队列,并编写作业处理程序来处理不同类型的消息.
既然你正在使用Django,我认为Beanstalkd非常合适.这是一个关于这个主题的非常好的教程.该文章中的第一条评论也有一些很好的提示.
就个人而言,我已经推出了一个用Erlang编写的自定义内存中队列服务器,其中的Python绑定用C语言编写.但redis看起来可能会成为未来排队/消息传递需求的有力竞争者.希望这可以帮助!