我正在尝试在池中异步加载numy文件:
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”:
^{pr2}$在加载第一个“包”之前,会发生以下错误:
Exception in thread Thread-8: Traceback (most recent call last):
File "C:\Users\roman\Anaconda3\envs\tsc1\lib\threading.py", line 914, in _bootstrap_inner self.run() File "C:\Users\roman\Anaconda3\envs\tsc1\lib\threading.py", line 862, in run self._target(*self._args, **self._kwargs) File "C:\Users\roman\Anaconda3\envs\tsc1\lib\multiprocessing\pool.py", line 463, in _handle_results task = get() File "C:\Users\roman\Anaconda3\envs\tsc1\lib\multiprocessing\connection.py", line 250, in recv buf = self._recv_bytes() File "C:\Users\roman\Anaconda3\envs\tsc1\lib\multiprocessing\connection.py", line 318, in _recv_bytes return self._get_more_data(ov, maxsize) File "C:\Users\roman\Anaconda3\envs\tsc1\lib\multiprocessing\connection.py", line 337, in _get_more_data assert left > 0 AssertionError
我密切监视资源:内存不是问题,出错时我还有足够的内存。 解压缩的文件只是普通的多维numpy数组。 单独使用一个池和一个更简单的方法是可行的,并且像这样加载文件。只有结合起来它才会失败。 (所有这些都发生在定制的keras生成器中。我怀疑这是否有用,但谁知道呢。)python3.5。在
这个问题的原因是什么?如何解释这个错误?在
谢谢你的帮助!在
它认为我已经找到了一个解决办法,通过检索小块数据。对我来说,这是一个列表。在
我有:
更改为:
^{pr2}$现在它似乎可以工作了,可能是通过一次序列化较少的数据。 所以,如果你能把你的数据分成更小的部分,你就可以克服这个问题。祝你好运!在
pythonccore代码中有一个错误,它阻止大于2GB的数据响应正确返回到主线程。 您需要按照前面的回答将数据拆分成更小的块,或者不对此函数使用多处理
{1{1}可能需要一个python(^/strong)来修复这个bug(^/strong)
如果你感兴趣的话,你可以在我发布的链接中的bug描述中找到更多关于导致这个bug的细节
相关问题 更多 >
编程相关推荐