0"AssertionError-6ren"> 0"AssertionError-我正在尝试在池中异步加载 numpy 文件: self.pool = Pool(2, maxtasksperchild = 1) ... nextPackage = self.pool.apply_a-6ren">
gpt4 book ai didi

Python 多处理 apply_async "assert left > 0"AssertionError

转载 作者:行者123 更新时间:2023-11-28 20:35:01 25 4
gpt4 key购买 nike

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

甚至在加载第一个“包”之前,就会发生以下错误:

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 数组。单独地,使用具有更简单方法的 Pool 是可行的,并且像这样加载文件也是可行的。只有结合起来才会失败。(所有这些都发生在自定义 keras 生成器中。我怀疑这是否有帮助,但谁知道呢。)Python 3.5。

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

感谢您的帮助!

最佳答案

Python C 核心代码中存在一个错误,该错误会阻止大于 2GB 的数据响应正确返回到主线程。您需要按照上一个答案中的建议将数据分成更小的 block ,或者不为此功能使用多处理

我向 python 错误列表 (https://bugs.python.org/issue34563) 报告了这个错误并创建了一个 PR (https://github.com/python/cpython/pull/9027) 来修复它,但它可能需要一段时间才能发布(更新:修复存在在 python 3.8.0+ 中)

如果您有兴趣,可以在我发布的链接中的错误描述中找到有关导致该错误的原因的更多详细信息

关于Python 多处理 apply_async "assert left > 0"AssertionError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47692566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com