我有一个简单的例子:
subprocesses = {}
class MyPP(protocol.ProcessProtocol):
def processExited(self, reason):
print "processExited, status %s" % (reason.value.exitCode,)
class Test:
def run(self):
for i in range(0, max_processes):
pp = MyPP()
command = ['sleep','10']
subprocess = reactor.spawnProcess(pp, command[0], command, {})
subprocesses[subprocess.pid] = subprocess
reactor.run()
Test().run()
我想从字典subprocesses元素中删除然后退出子进程。怎么做?
答案 0 :(得分:9)
subprocesses = {}
max_processes = 3
from twisted.internet import protocol, reactor
class MyPP(protocol.ProcessProtocol):
def connectionMade(self):
self.pid = self.transport.pid
def processExited(self, reason):
print "processExited, status %s" % (reason.value.exitCode,)
del subprocesses[self.pid]
print 'Remaining subprocesses', subprocesses
class Test:
def run(self):
for i in range(0, max_processes):
pp = MyPP()
command = ['sleep','3']
subprocess = reactor.spawnProcess(pp, command[0], command, {})
subprocesses[subprocess.pid] = subprocess
Test().run()
reactor.run()
注意几件事:
transport.pid
在调用processExited
时不再有效,因此如果您需要在流程退出后使用它,则需要提前保存。这就是connectionMade
方法中发生的情况。