吴永铎 发表于 2024-1-23 09:43:14

控制方法求助

本帖最后由 吴永铎 于 2024-1-23 11:39 编辑

这是一个错误的示范图,不能在减小内存占用的同时最大限度减小运行时间。

其中相机拍照和检测是顺序执行的。每个相机完成拍照后,会启动下一个相机的拍照和当前相机的检测程序。如果任何一个步骤没有完成,它将重新尝试,直到成功为止。

按照此逻辑运行,假定拍照时间20ms一次,检测时间150ms一次。开启相机1的20ms和相机4自己运行的90ms是单线程运行的,浪费了很多时间,希望在最大限度开启两个线程的前提条件下最大限度减小时间的花销。(事实上检测时间和拍照时间都是变化的,只是以此举例)。

FishC 发表于 2024-1-23 09:44:07

要实现两个检测程序同时并行运行,可以使用多线程或者多进程的方式。下面是一个使用多线程的示例代码:

import threading
import time

# 模拟相机拍照的函数
def take_photo(camera_name):
    print(camera_name + "开始拍照")
    time.sleep(2)# 模拟拍照时间
    print(camera_name + "完成拍照")

# 模拟检测程序的函数
def detection(detection_name):
    print(detection_name + "开始检测")
    time.sleep(5)# 模拟检测时间
    print(detection_name + "完成检测")

# 创建线程对象并启动线程
if __name__ == '__main__':
    t1 = threading.Thread(target=take_photo, args=("相机1",))
    t2 = threading.Thread(target=take_photo, args=("相机2",))
    t3 = threading.Thread(target=detection, args=("检测程序3",))
    t4 = threading.Thread(target=detection, args=("检测程序4",))

    t1.start()
    t2.start()
    t3.start()
    t4.start()

    t1.join()
    t2.join()
    t3.join()
    t4.join()

    print("所有相机拍照和检测任务已完成")

在上述代码中,我们使用了`threading`模块创建了4个线程对象,并分别赋予相机拍照和检测的函数作为目标函数,通过`start()`方法启动线程,使它们同时运行。通过`join()`方法等待线程结束,确保所有任务都完成后再打印出"所有相机拍照和检测任务已完成"的信息。

请注意,在多线程中并不能真正实现多核并行处理,因为Python解释器的GIL(Global Interpreter Lock)限制了同一时刻只能有一个线程执行Python字节码。如果你希望真正实现并行处理,可以考虑使用多进程或者利用其他工具或框架进行并行计算。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2024-1-23 17:41:58

有鱼币!

sfqxx_小 发表于 2024-1-23 17:42:23

让我学习一下。

sfqxx 发表于 2024-1-23 17:43:27

@zhangjinxuan

我叫什么---- 发表于 2024-1-23 19:31:31

来学习一下
页: [1]
查看完整版本: 控制方法求助