首页 > 解决方案 > 使用 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_funcclass 之外时A,无论是否编译,它都可以工作cython

赛通:v0.29.13

标签: pythonmultiprocessingpython-3.6cython

解决方案


我最近也遇到了这个问题。使用 Cython 编译代码时不能传递静态方法。对我来说,解决方案是将基于 mp 的静态方法移到类之外。可以说这是一个很好的调用,并且使代码更具可读性。


推荐阅读