我试图从python线程调用多处理功能,以避免全局解释器锁会影响我的多处理功能。
逻辑看起来像这样:
python --- ongoing python processing...
-> py thread -> py multiprocessing call -> C-code (dll/ctypes)
这有意义吗?C代码会在单独的核心上运行,还是太复杂而无法工作?
谢谢。
编辑:感谢您的答复。我应该澄清,但是我需要打电话给第二个线程,因为我必须先制作一个python数组,然后将指针传递给C函数。因此,我不能太早称之为多处理功能(以及主要的Python处理需要启动并继续无缝(。
edit :这是代码逻辑,以及为什么我无法将第二个过程与主代码插入第二个进程:
main():
...
p = Process(target=save_c, args=(...,))
p.start()
p.join() #Main thread will lock here and wait until return;
#Other code that needs to be processed follows the multiprocess call
save_c():
''' Function which calls C-module '''
_sum = ctypes.CDLL('/home/pi/murphylab_picam/temp/libsum.so')
_sum.c_function.argtypes = (ctypes.c_int, ctypes.POINTER(ctypes.c_int))
_sum.c_function(ctypes.c_int(num_numbers), array_type(*_sum.numbers))
我在这里想念什么?是否有其他方法可以使用持续处理的多处理内联?
只要您不想等待该过程完成之前,就不需要立即加入。
这是并发编程的原则。
重要的是,您最终致电join
,否则您的主要过程将终止离开孩子孤儿。
child_process = Process(....)
child_process.start() # the child process will start its independend execution here
do_some_stuff()
do_some_more_stuff()
child_process.join() # here you are waiting for it to finish