问题是您没有调用返回的 by get()
,也没有使用/等到子进程完成工作后再退出主进程。由于 a 内的所有工作进程都是守护进程,因此它们会在主进程退出后立即终止。这意味着您的示例程序在子进程可以打印任何内容之前退出(并带走它的子进程)。您可以通过调用或添加/调用来修复它: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