python - 使用 cython 编译后,具有多处理功能的 python 函数无法运行
问题描述
我的cython有点问题,我的脚本功能如下:</p>
class A(object):
@staticmethod
def subprocess_func(split_data):
do something
def multi_process(process_func, datas, process_num, *args):
manager = multiprocessing.Manager()
out_q = manager.Queue(process_num)
p = Pool(process_num)
each_num = math.ceil(len(datas)/process_num)
for i in range(process_num):
split_data = datas[i * each_num: (i + 1) * each_num]
p.apply_async(A.subprocess_func, args=(split_data,))
process_func
是类的静态方法A
,不编译时cython
,它可以工作。但是用 编译cython
后,调用函数后就卡住了,没有任何日志multi_process
就无法进入。subprocess_func
但是,当我将函数移到subprocess_func
class 之外时A
,无论是否编译,它都可以工作cython
。
赛通:v0.29.13
解决方案
我最近也遇到了这个问题。使用 Cython 编译代码时不能传递静态方法。对我来说,解决方案是将基于 mp 的静态方法移到类之外。可以说这是一个很好的调用,并且使代码更具可读性。
推荐阅读
- usb-drive - 从 U 盘获取生产日期
- python - 无法在 google colab 上导入 pytorch_lightning
- azure-ad-b2c - 如何为 Azure AD B2C 电话登录添加“重新发送代码”
- python - 使用硒进行网页抓取时,我没有获得时间价值
- pipeline - Dask:构建和执行高效的管道
- python - 如何拟合 sinc 平方函数?
- delphi - Delphi OpenDialog文件名显示问题
- recursion - Prolog:递归后继定义的自然数乘法谓词不终止
- java - 尝试运行 uiautomatorviewer 并收到以下错误:“-Djava.ext.dirs=..\lib\x86_64;..\lib 不受支持。请改用 -classpath。”
- typescript - TypeScript 中的函数链工厂保留输入/输出类型?