所以我有一个后台procss,我需要公开/控制作为一个Web服务。我已经将进程包装起来以便能够通过管道接受命令,但现在我正试图找出如何控制它。
要求如下:
我认为主要的问题是如何让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作出回应,请给我一个很好的探索方法。
答案 0 :(得分:0)
好的,所以你想让一个进程启动并运行并接受django worker的命令?
在这种情况下,芹菜不是一个好的解决方案,因为在任务产生后它不提供通信。
恕我直言,一个很好的解决方案是拥有一个带有无限主循环的守护进程(用django管理命令实现),在运行之间休眠,从特定队列中侦听命令。
对于沟通 - kombu / django-kombu会很棒(这是芹菜的一部分)。
答案 1 :(得分:0)
我的最终解决方案是根据pidbox.Mailbox编写自定义“邮箱”。他们的实施被严重破坏,但算法是可靠的。
我基本上建立了一个通过django托管的REST API,然后让其余的api向AMQP队列发送消息(QPID实现)。
然后我有一个进程,可以监视队列,并在进入任何命令时传递。
它运作良好,当它结合在一起时非常棒。
答案 2 :(得分:-1)
可能Celery(基于分布式消息传递的异步任务队列/作业队列)适合您的账单。