也许更熟悉 Python 的多处理池代码的人可以帮助我。我正在尝试通过套接字连接同时连接到我网络上的多个主机(任何时候 N 个)并执行一些 RPC。当一个主机完成时,我想将下一个主机添加到池中以运行,直到所有主机完成。
我有一个类 HClass,它有一些方法可以做到这一点,并且 hostlist 中包含一个主机名列表。但是我无法了解 Pool 的任何 docs.python.org 示例来使其正常工作。
一小段代码来说明我到目前为止所得到的:
hostlist = [h1, h2, h3, h4, ....]
poolsize = 2
class HClass:
def __init__(self, hostname="default"):
self.hostname = hostname
def go(self):
# do stuff
# do more stuff
....
if __name__ == "__main__":
objs = [HClass(hostname=current_host) for current_host in hostlist]
pool = multiprocessing.pool(poolsize)
results = pool.apply_async(objs.go())
到目前为止,我很幸运有这个回溯:
Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 504, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/lib/python2.7/multiprocessing/pool.py", line 319, in _handle_tasks
put(task)
PicklingError: Can't pickle <type 'generator'>: attribute lookup __builtin__.generator failed
进程一直挂起,直到我用 Control-C 退出它。