因此,我正在开发一个应用程序,每次启动时都要检查〜50 GB的数据与哈希列表。显然这需要并行化,我不希望应用程序挂在“LOADING ...”屏幕上一分半钟。multiprocessing.Pool.map_async似乎并没有做任何事情吗?
我正在使用multiprocessing.Pool
的map_async
来处理这个;主线程调用map_async(checkfiles, path_hash_pairs, callback)
并提供一个回调,告诉它在发现不匹配时发出警告。
麻烦是......没有任何反应。用我的任务管理器查看Python进程显示它们产生并立即终止而不做任何工作。他们从不打印任何东西,当然也不会打完电话。
该缩小的例子也表现出了同样的问题:
def printme(x):
time.sleep(1)
print(x)
return x**2
if __name__ == "__main__":
l = list(range(0,512))
def print_result(res):
print(res)
with multiprocessing.Pool() as p:
p.map_async(printme, l, callback=print_result)
p.join()
time.sleep(10)
运行它,...没有任何反应。交换map_async
为map
完全按预期工作。
我只是犯了一个愚蠢的错误或什么?
你是如何将上下文管理器应用到池的?这是我不知道的新东西吗?如果我运行你的代码,我会得到:'AttributeError:__exit__',但是如果我手动管理池(map_async,关闭),一切正常。 –