spawnProcess的简单示例

2024-10-05 14:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我举一个简单的例子:

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元素中删除,然后子进程退出。怎么做?在


Tags: runtestselfdefprotocolcommandclass例子
1条回答
网友
1楼 · 发布于 2024-10-05 14:28:37
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时,transport.pid不再有效,因此如果需要在进程退出后使用它,则需要提前保存它。这就是connectionMade方法中发生的情况。在
  • 从子流程字典中删除内容与从任何字典中删除任何内容相同。在

相关问题 更多 >