【问题标题】:python twisted and multiprocessingpython扭曲和多处理
【发布时间】:2012-01-28 00:30:39
【问题描述】:
我如何分叉(通过流程包装)并在新流程中完全重置扭曲。
我必须从具有大量反应器的进程中生成一个新进程,但我需要更改反应器(在新进程中)删除某些内容并添加其他内容。
例如,我在父级和子级中都需要一个 glib2reactor....但是 twisted 通知我反应器已经安装(在 fork 之后)。 Fork 使用每个扭曲的反应器将父记忆复制给孩子。我怎样才能“重置”扭曲的孩子?
感谢您的帮助,
杜达
【问题讨论】:
标签:
python
twisted
multiprocessing
【解决方案1】:
os.fork()克隆当前进程,将子进程的进程id返回给父进程,将0返回给子进程。
if os.fork():
"parent"
else:
"child"
如果您使用os.system() 或subprocesses 模块,您将获得一个全新的流程。
您可以在os.system() 命令中使用分叉& 来避免阻塞。
error = os.system('ls &')
os.execv和朋友用目标命令替换当前进程。
【解决方案2】:
Twisted 支持通过twisted.internet.interfaces.IReactorProcess 启动任意子进程(包括使用 Twisted 的进程)。使用方法见the process howto。