0

我有一组长期存在的进程,其设置非常昂贵,我想将其推入一组工作进程中,以并行执行它们的工作。每个工人都是不同的,从我们数据库的不同部分构建。我偶尔会关闭工人并重建它们,比如每 4 小时左右。

我在多处理模块中看到的 python 示例似乎都是相同的、短暂的进程,它们只做一件事然后退出。

这是我想出的一个样本,用于将工作分配给一个不同的、长寿的工人银行。

这是步入正轨,还是有更好的方法来做到这一点?

class Worker(Process):

    def __init__(self):
        Process.__init__(self)  # ...or super
        self.parent_side, self.pipe = Pipe()

    def do_super_slow_initialization(self):
        print 'all work and no play makes Jack a dull boy'

    def run(self):
        self.do_super_slow_initialization()

        while True:
            message = self.pipe.recv()

            if not message:
                break

            self.pipe.send({'message': message,
                            'pid': os.getpid(),
                            'ppid': os.getppid()
                            })

        self.pipe.close()


def main():
    print '+++ (parent)', os.getpid(), os.getppid()

    workers = [Worker() for _ in xrange(10)]

    # start the workers
    for w in workers:
        w.start()

    # a bunch of messages to get through
    for x in xrange(10):

        # send message to each worker
        for y, w in enumerate(workers):
            w.parent_side.send('work%s_%s' % (x, y))

        # get the results
        for w in workers:
            print w.parent_side.recv()

    # shut down
    for w in workers:
        w.parent_side.send(None)
        w.join()
4

0 回答 0