我一直在寻找这个问题的答案,但我可能还没有找到正确的信息。
我正在尝试将数据发送到服务器,一旦收到服务器,就会根据该数据执行python脚本。我一直在尝试生成一个线程并返回,但我无法弄清楚如何“分离”线程。我只需要等到线程返回才能返回HttpResponse()。这是不可接受的,因为网站界面还有许多其他东西需要能够在服务器上运行时使用。
我不确定这是一个明确的解释,但我会非常乐意澄清是否有任何部分令人困惑。
答案 0 :(得分:3)
看看芹菜。这是非常好的,你可以接受请求,并迅速将其卸载给工人,并返回。它使用起来很简单。
答案 1 :(得分:1)
最简单的说,您可以使用subprocess.Popen执行此操作。有关子进程模块的一些信息,请参见此处:
http://docs.python.org/library/subprocess.html
还有其他(可能更好)的方法,但这个方法似乎符合您的要求。
答案 2 :(得分:1)
使用消息队列系统,如芹菜(django-celery可能会帮助您。)
使用由cron定期调用或始终运行的RDBMS和后台进程。 首先,Web服务器将后台作业所需的数据插入到数据库表中。然后,后台进程(始终由cron运行或定期运行)获取最新插入的行并进行处理。
产生一个线程。
worker_thread = threading.Thread(target = do_background_job,args = args)
worker_thread.setDaemon(假)
worker_thread.start()
返回HttpResponse()
即使发送了HttpResponse,也会处理do_background_job。但是,因为Web服务器(apache)可能会杀死任何线程,所以无法保证执行background_job。