【发布时间】:2019-01-03 01:05:54
【问题描述】:
我正在尝试在 Python 中并行运行多个 Yolos。
我有一个函数,我正试图将其用作工作人员。像这样:
import darknet as dn
def yolo(input_queue, net, meta):
while True:
task = input_queue.get_nowait()
c = task.shape[0]
h = task.shape[1]
w = task.shape[2]
task = (task/255.0)
task = task.flatten()
new_arr = np.copy(task).astype(np.float32)
new_arr = np.ctypeslib.as_ctypes(new_arr)
im = dn.IMAGE(w,h,c,new_arr)
dn.rgbgr_image(im)
print(dn.detect(net, meta, im))
你可以找到暗网文件here。
先不说我把数组转换成ctype数组的方式了。已经讨论过here。
如果我将这个函数作为一个普通函数运行,它就像一个魅力。但如果我像这样以工人的身份运行它:
p = Process(target=yolo, args=(input_queue, net, meta))
p.start()
它一直到最后一行然后它给了我这个错误:
CUDA Error: initialization error
python: ./src/cuda.c:36: check_error: Assertion `0' failed.
我无法弄清楚为什么会发生此错误。 谁能帮忙?导致此问题的这两种使用此功能的方式有什么区别?
【问题讨论】:
-
您可能需要将主脚本的“入口点”放在
if __name__ == '__main__':条件中,如multiprocessing的“安全导入主模块”部分所述编程指导方针 documentation. -
@GeeTransit 它是不同的,但 sagarwal 的回答给了我解决问题的想法
标签: python multiprocessing yolo