我的功能本身可以正常运行,但是当我以工作人员身份运行时却无法正常运行

时间:2019-01-03 01:05:54

标签: python multiprocessing yolo

我正在尝试在Python中并行运行多个Yolos。

我有一个要用作工作人员的函数。像这样的东西:

HINSTANCE

您可以找到暗网文件this thread

让我们不要谈论将数组转换为ctype数组的方式。 here对此进行了讨论。

如果我运行此功能,则正常功能会像超级按钮一样工作。但是如果我像这样的工人来运行它:

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))

它一直下降到最后一行,然后给我这个错误:

p = Process(target=yolo, args=(input_queue, net, meta))
p.start()

我不知道为什么会发生此错误。 有人可以帮忙吗?导致此问题的两种使用此功能的方式有什么区别?

1 个答案:

答案 0 :(得分:0)

感谢this,我发现问题是您无法在具有不同PID的进程之间共享CUDA中的上下文。因此,我发现如果我在相同的过程中运行相关的内容(在我的情况下为net),那么它可以正常工作。在此之前,我是在开始工作之前先加载重物。

相关问题