Python:DJango如何拥有一个长期运行的流程?

时间:2011-03-24 12:56:42

标签: python django

所以我有一个后台procss,我需要公开/控制作为一个Web服务。我已经将进程包装起来以便能够通过管道接受命令,但现在我正试图找出如何控制它。

要求如下:

  1. 需要能够通过网络启动流程
  2. 需要能够发送cmds
  3. 需要能够从cmds返回结果
  4. 进程一旦开始就会活着直到被杀死
  5. 我认为主要的问题是如何让django拥有这个过程?从某种意义上讲,保留一个有效的保存管道,以便将来与后台进程通信。现在是它的东西(只是一个例子):

    if __name__ == '__main__':
     to_process_pipe, process_pipe = Pipe()
     node = PFacade(process_pipe)
     p.start()
    
     to_process_pipe.send(['connect'])
     print to_process_pipe.recv()
    
     p.killed = True
     p.join()
    

    我想我需要一种更好的方式来沟通,但我不知道如何将管道存放在DJango中。


    并且,如果您打算使用Celery作出回应,请给我一个很好的探索方法。

3 个答案:

答案 0 :(得分:0)

好的,所以你想让一个进程启动并运行并接受django worker的命令?

在这种情况下,芹菜不是一个好的解决方案,因为在任务产生后它不提供通信。

恕我直言,一个很好的解决方案是拥有一个带有无限主循环的守护进程(用django管理命令实现),在运行之间休眠,从特定队列中侦听命令。

对于沟通 - kombu / django-kombu会很棒(这是芹菜的一部分)。

答案 1 :(得分:0)

我的最终解决方案是根据pidbox.Mailbox编写自定义“邮箱”。他们的实施被严重破坏,但算法是可靠的。

我基本上建立了一个通过django托管的REST API,然后让其余的api向AMQP队列发送消息(QPID实现)。

然后我有一个进程,可以监视队列,并在进入任何命令时传递。

它运作良好,当它结合在一起时非常棒。

答案 2 :(得分:-1)

可能Celery(基于分布式消息传递的异步任务队列/作业队列)适合您的账单。