所以我使用的subprocess
产卵通过使用Django网络接口一个长期运行的进程。 现在,如果用户想要回来的页面,我想给他终止的选项subprocess
在后面的阶段。
如何才能做到这一点? 我实现了同样的事情,在Java中,并提出了全球单ProcessManager的字典存储过程对象在内存中。 我可以做在Python类似的东西?
编辑
是单身和ProcessManager的的哈希值是干净做它的方式。 伊曼纽尔的代码可与一些修改完美的罚款。
谢谢
所以我使用的subprocess
产卵通过使用Django网络接口一个长期运行的进程。 现在,如果用户想要回来的页面,我想给他终止的选项subprocess
在后面的阶段。
如何才能做到这一点? 我实现了同样的事情,在Java中,并提出了全球单ProcessManager的字典存储过程对象在内存中。 我可以做在Python类似的东西?
编辑
是单身和ProcessManager的的哈希值是干净做它的方式。 伊曼纽尔的代码可与一些修改完美的罚款。
谢谢
我认为在Python中实现Singleton模式的简单方法是通过类属性:
import subprocess
class ProcessManager(object):
__PROCESS = None;
@staticmethod
def set_process(args):
# Sets singleton process
if __PROCESS is None:
p = subprocess.Popen(args)
ProcessManager.__PROCESS = p;
# else: exception handling
@staticmethod
def kill_process():
# Kills process
if __PROCESS is None:
# exception handling
else:
ProcessManager.__PROCESS.kill()
然后,你可以通过使用这个类:
from my_module import ProcessManager
my_args = ...
ProcessManager.set_process(my_args)
...
ProcessManager.kill_process()
笔记:
ProcessManager
负责创建的过程中,是对称的,其结局 您可以使用同样的技术在Python作为您在Java一样,那就是存储参考过程中的模块变量或执行一种单例。
你必须,而不是Java的唯一的问题是,Python没有大富大贵的比喻给Servlet规范,没有接口来处理应用程序开始或结束。 在大多数情况下,如何应用程序的许多实例在运行,你不应该担心,因为你从一个持久存储获取的所有数据。 但在这种情况下,你应该了解你的应用程序是如何部署。
如果您的应用程序(FastCGI的实例,例如,或在CherryPy的一个WSGI应用程序)的单个长时间运行的情况下,您可以隔离进程中一个独立的模块处理功能,当模块引入时加载它(任何模块是在应用程序中导入仅一次)。 如果有许多实例(许多FastCGI的情况下,或者普通的CGI的脚本),你应该更好地分离的子进程,并保持在一个持久化存储它们的ID(在数据库或文件),并与相交他们当前正在运行的进程列表一经请求。