Python多处理应用_async“assert left>0”AssertionE

2024-10-01 11:21:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在池中异步加载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。在

这个问题的原因是什么?如何解释这个错误?在

谢谢你的帮助!在


Tags: 文件inpyselfgetliblinemultiprocessing
2条回答

它认为我已经找到了一个解决办法,通过检索小块数据。对我来说,这是一个列表。在

我有:

for i in range(0, NUMBER_OF_THREADS):
    print('MAIN: Getting data from process ' + str(i) + ' proxy...')
    X_train.extend(ListasX[i]._getvalue())
    Y_train.extend(ListasY[i]._getvalue())
    ListasX[i] = None
    ListasY[i] = None
    gc.collect()

更改为:

^{pr2}$

现在它似乎可以工作了,可能是通过一次序列化较少的数据。 所以,如果你能把你的数据分成更小的部分,你就可以克服这个问题。祝你好运!在

pythonccore代码中有一个错误,它阻止大于2GB的数据响应正确返回到主线程。 您需要按照前面的回答将数据拆分成更小的块,或者不对此函数使用多处理

{1{1}可能需要一个python(^/strong)来修复这个bug(^/strong)

如果你感兴趣的话,你可以在我发布的链接中的bug描述中找到更多关于导致这个bug的细节

相关问题 更多 >