get()
問題は、AsyncResult
返されたを呼び出さなかったこと、またはメイン プロセスを終了する前に子プロセスの動作が完了するまで/をapply_async
使用しなかったことです。内のすべてのワーカー プロセスはデーモンであるため、メイン プロセスが終了するとすぐに終了します。つまり、子プロセスが何かを出力する前に、サンプル プログラムが終了します (そして、その子プロセスも一緒に)。を呼び出すか、 /呼び出しを追加することで修正できます。pool.close
pool.join()
Pool
.get()
AsyncResult
close()
join()
class TaskThread(object):
def __call__(self):
print("in TaskThread.__call__")
pool=multiprocessing.Pool(4)
task=TaskThread()
pool.apply_async(task)
pool.close()
pool.join()
または:
class TaskThread(object):
def __call__(self):
print("in TaskThread.__call__")
pool=multiprocessing.Pool(4)
task=TaskThread()
result = pool.apply_async(task)
result.get()
編集:
Queue
あなたがしようとしている方法を渡すためには、次のようなことをする必要があります:
import multiprocessing
class TaskThread(object):
def __init__(self, manager):
self.queue = manager.Queue()
def __call__(self):
print("in TaskThread.__call__")
self.queue.put(1)
if __name__ == "__main__":
pool=multiprocessing.Pool(4)
m = multiprocessing.Manager()
task=TaskThread(m)
result = pool.apply_async(task)
result.get()
print(task.queue.get())
出力:
in TaskThread.__call__
1