おそらく、Pythonのマルチプロセッシングプールコードに精通している人が私を助けてくれるでしょう。ネットワーク上の複数のホストに同時に(一度にN個)ソケット接続を介して接続し、いくつかのRPCを実行しようとしています。1つのホストが終了したら、次のホストをプールに追加して、すべてが完了するまで実行します。
そのためのいくつかのメソッドを備えたクラス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を実行するまでプロセスがハングする場合。