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 之外。可以说这是一个很好的调用,并且使代码更具可读性。
我用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 之外。可以说这是一个很好的调用,并且使代码更具可读性。