【发布时间】:2017-12-07 10:11:30
【问题描述】:
我正在尝试在池中异步加载 numpy 文件:
self.pool = Pool(2, maxtasksperchild = 1)
...
nextPackage = self.pool.apply_async(loadPackages, (...))
for fi in np.arange(len(files)):
packages = nextPackage.get(timeout=30)
# preload the next package asynchronously. It will be available
# by the time it is required.
nextPackage = self.pool.apply_async(loadPackages, (...))
方法“loadPackages”:
def loadPackages(... (2 strings & 2 ints) ...):
print("This isn't printed!')
packages = {
"TRUE": np.load(gzip.GzipFile(path1, "r")),
"FALSE": np.load(gzip.GzipFile(path2, "r"))
}
return packages
甚至在加载第一个“包”之前,就会出现以下错误:
线程 Thread-8 中的异常:回溯(最近一次调用最后一次):
文件“C:\Users\roman\Anaconda3\envs\tsc1\lib\threading.py”,第 914 行, 在 _bootstrap_inner self.run() 文件“C:\Users\roman\Anaconda3\envs\tsc1\lib\threading.py”,第 862 行,在 跑 self._target(*self._args, **self._kwargs) 文件“C:\Users\roman\Anaconda3\envs\tsc1\lib\multiprocessing\pool.py”,行 463,在_handle_results中 任务 = get() 文件 "C:\Users\roman\Anaconda3\envs\tsc1\lib\multiprocessing\connection.py", 第 250 行,在接收 buf = self._recv_bytes() 文件“C:\Users\roman\Anaconda3\envs\tsc1\lib\multiprocessing\connection.py”, 第 318 行,在 _recv_bytes 中 返回 self._get_more_data(ov, maxsize) 文件 "C:\Users\roman\Anaconda3\envs\tsc1\lib\multiprocessing\connection.py", 第 337 行,在 _get_more_data 中 向左断言 > 0 AssertionError
我密切监视资源:内存不是问题,发生错误时我还有很多剩余。 解压缩的文件只是普通的多维 numpy 数组。 单独使用具有更简单方法的 Pool 是可行的,并且像这样加载文件是可行的。只有结合起来才会失败。 (所有这些都发生在自定义的 keras 生成器中。我怀疑这是否有帮助,但谁知道呢。)Python 3.5。
此问题的原因可能是什么?如何解释这个错误?
感谢您的帮助!
【问题讨论】:
-
我有同样的问题,还有大量的 RAM 可以使用。您找到问题的解决方案了吗?
标签: python multithreading python-3.x numpy pool