gpt4 book ai didi

python - Joblib Parallel + Cython 永远挂起

转载 作者:行者123 更新时间:2023-12-01 01:24:17 30 4
gpt4 key购买 nike

我在使用 Cython 创建使用 joblib.Parallel 的 Python 扩展时遇到了一个非常奇怪的问题.

以下代码按预期工作:

from joblib import Parallel, delayed
from math import sqrt

print(Parallel(n_jobs=4)(delayed(sqrt)(x) for x in range(4)))

以下代码永远挂起:

from joblib import Parallel, delayed

def mult(x):
return x*3

print(Parallel(n_jobs=4)(delayed(mult)(x) for x in range(4)))

我不知道为什么。我使用以下 setup.py :

from distutils.core import setup
from Cython.Build import cythonize

setup(
ext_modules = cythonize("file.pyx")
)

我使用 python setup.py build_ext --inplace 创建扩展我将其导入为 import file .

谢谢!

最佳答案

经过一段时间,我终于找到了解决方案:在腌制程序状态以将其发送到不同的 CPU 时出现死锁。我不完全确定原因,但检查源代码,看起来好像生成了新线程来腌制对象,而这些线程是导致死锁的线程。

一旦生成进程,它们就会正常运行:通过库multiprocessing手动创建进程可以解决问题。

或者,您可以使用 multiprocessing.Pool 手动指定 start_method:

from multiprocessing import get_context()

if __name__ == '__main__':
with get_context("spawn").Pool() as pool:
...

您可以自由选择spawnforkserver作为start_method

访问this page如果您想了解更多信息。

关于python - Joblib Parallel + Cython 永远挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53497078/

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