我有一个简单的例子:
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()
Run Code Online (Sandbox Code Playgroud)
我想从字典子进程中删除子进程,然后退出子进程.怎么做 ?
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()
Run Code Online (Sandbox Code Playgroud)
注意几件事:
transport.pid不再受时间有效processExited被调用,所以如果你需要的过程出来后,你需要提前保存它使用它.这是该connectionMade方法中发生的情况.