如何使用多处理python更新和检索图像?

2024-05-15 22:01:30 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的代码中有两个函数,第一个函数operate_camera更新存储变量。第二个函数print_func打印存储变量。你知道吗

我想同时运行这两个函数,打印过程延迟15秒。但是operate_camera函数包含一个while循环。通过运行脚本,它只会运行进程p2一次,并且会停留在进程p1上。你知道吗

为了简单起见,我在下面的代码中使用简单的1D数组。你知道吗

from multiprocessing import Process, Array 
import numpy as np 
import time

def operate_camera(store):
    while True: # loop that updates image
        store = store + np.ones_like(store)

def print_func(store):
    print(store)
    time.sleep(15)

if __name__ == "__main__":
    store = np.array([0,0,0])

    p1 = Process(target=operate_camera, args=(store,))
    p2 = Process(target=print_func, args=(store,))

    p1.start()    
    p2.start()

输出只会停留在

[0,0,0]

在多处理软件包中是否有任何解决方案可以让我保留这种形式的代码。如果没有,这个问题还有其他的解决办法吗?你知道吗


Tags: store函数代码importtime进程npprocess
1条回答
网友
1楼 · 发布于 2024-05-15 22:01:30

首先,你真的想在这里多处理,而不是多线程? 你要求其他的解决方案,所以,我提出了多线程来解决这个问题。您应该检查this answer以获得清晰的信息,这里主要讨论相同的问题。所以,我认为问题是print函数只执行一个,因此也需要一个循环。你知道吗

from threading import Thread
import numpy as np
import time

store = np.array([0, 0, 0])


def operate_camera():
    while True:
        global store
        store += np.ones_like(store)


def print_func():
    while True:
        time.sleep(15)
        print(store)


if __name__ == "__main__":

    t1 = Thread(target=operate_camera)
    t2 = Thread(target=print_func)

    t1.start()
    t2.start()

    # other code

    t1.join()
    t2.join()

您可以注意到,这段代码使用的是全局对象,这不是最佳实践,但是我们需要一个共享对象。你知道吗

对于带参数的函数

from threading import Thread
import numpy as np
import time


def operate_camera(store):
    while True:
        store += np.ones_like(store)


def print_func(store):
    time.sleep(1)
    print(store)


if __name__ == "__main__":
    store = np.array([0, 0, 0])

    camera_thread = Thread(target=operate_camera, args=(store, ))
    camera_thread.setDaemon(True)
    camera_thread.start()

    while True:
        print_func(store)

相关问题 更多 >