我有一组长期存在的进程,其设置非常昂贵,我想将其推入一组工作进程中,以并行执行它们的工作。每个工人都是不同的,从我们数据库的不同部分构建。我偶尔会关闭工人并重建它们,比如每 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()