【问题标题】:python function with multiprocessing can not run after compiling with cython使用 cython 编译后,具有多处理功能的 python 函数无法运行
【发布时间】:2020-05-12 21:22:56
【问题描述】:

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

但是,当我将函数 subprocess_func 移动到类 A 之外时,无论是否使用 cython 编译,它都可以工作。

cython:v0.29.13

【问题讨论】:

    标签: python multiprocessing python-3.6 cython


    【解决方案1】:

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

    【讨论】:

    • 你有没有发现这是为什么?也许值得在他们的问题跟踪器中创建一个问题?听起来它有点坏了,或者有一个很好的理由为什么这是不可能的,呵呵。
    • @Robert Kearns 我按照你说的解决了这个问题,但是是什么导致了这个问题?虽然代码更具可读性,但我必须将所有方法(如 subprocess_func 和在函数 subprocess_func 中调用的方法)移到 A 类之外。
    猜你喜欢
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2020-10-14
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2018-09-27
    相关资源
    最近更新 更多