Django - Python:生成一个进程并返回

时间:2010-12-17 21:52:23

标签: python django multithreading

我一直在寻找这个问题的答案,但我可能还没有找到正确的信息。

我正在尝试将数据发送到服务器,一旦收到服务器,就会根据该数据执行python脚本。我一直在尝试生成一个线程并返回,但我无法弄清楚如何“分离”线程。我只需要等到线程返回才能返回HttpResponse()。这是不可接受的,因为网站界面还有许多其他东西需要能够在服务器上运行时使用。

我不确定这是一个明确的解释,但我会非常乐意澄清是否有任何部分令人困惑。

3 个答案:

答案 0 :(得分:3)

看看芹菜。这是非常好的,你可以接受请求,并迅速将其卸载给工人,并返回。它使用起来很简单。

http://celeryproject.org/

答案 1 :(得分:1)

最简单的说,您可以使用subprocess.Popen执行此操作。有关子进程模块的一些信息,请参见此处:

http://docs.python.org/library/subprocess.html

还有其他(可能更好)的方法,但这个方法似乎符合您的要求。

答案 2 :(得分:1)

  1. 使用消息队列系统,如芹菜(django-celery可能会帮助您。)

  2. 使用由cron定期调用或始终运行的RDBMS和后台进程。 首先,Web服务器将后台作业所需的数据插入到数据库表中。然后,后台进程(始终由cron运行或定期运行)获取最新插入的行并进行处理。

  3. 产生一个线程。

  4.   

    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。