python - 如何使用多处理 python 更新和检索图像?
问题描述
在我的代码中,我有两个函数,第一个函数operate_camera
更新存储变量。第二个函数print_func
打印存储变量。
我想同时运行这两个功能,打印过程延迟 15 秒。但是该operate_camera
函数包含一个while
循环。并且通过运行脚本,它只会运行p2
一次进程,并且会停留在进程中p1
。
为简单起见,我在以下代码中使用简单的一维数组。
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]
多处理包中是否有任何解决方案可以让我保留这种形式的代码。如果没有,是否有任何替代解决方案来解决这个问题?
解决方案
首先,你真的想要多处理,而不是多线程吗?你要求替代解决方案,所以,我想出了多线程来解决这个问题。为了清楚起见,您应该检查此答案,其中讨论了大多数相同的问题。所以,我认为问题在于你的 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)
推荐阅读
- java - SQL 列 Jpa 中最常见的值
- r - 制作 ggplot2 图表,其中日期列具有不同的颜色
- php - Android 模拟器应用程序无法连接到我的本地 mysql 服务器
- excel - 在 Azure Cloud Shell 中将数据写入 Excel 表 powershell ImportExcel 模块
- python - 如何在python中多次重复一个函数
- reactjs - 从 github repo 自动部署到 web 主机
- kubernetes - 使用 kubernetes 和 YAML 创建 Pod 时出现问题
- delphi - ADODataSet.Open 绕过 try catch 与 `ArgumentOutOfRange` 异常,挂起应用程序 - Delphi 10.2
- node.js - 运行 docker-compose up 时出现此错误 - TypeError: redis.createCient({}) is not a function
- php - PHP中真正奇怪的substr行为,输出不一致