python 使用 cython 编译后,具有多处理功能的函数不能 运行

python function with multiprocessing can not run after compiling with cython

我用cython有问题,我的脚本功能如下:

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 是 class A 的静态方法,当不使用 cython 编译时,它可以工作。但是用cython编译后,在调用函数multi_process后卡住,无法进入subprocess_func,没有任何日志。

但是,当我将函数 subprocess_func 移到 class A 之外时,无论是否使用 cython 进行编译,它都有效。

cython: v0.29.13

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