多线程从一个函数到另一个函数再回到主函数

Multi Threading from a function to another function and back to the main function

目前这是我的设置,python 在 PyCharm 中,还有一个带有 MAX30100 心率传感器的 Arduino Uno。我目前能够通过 pyserial 将数据从 arduino 传输到我的 pycharm,并将在 pycharm 中显示心率。 但我希望我的程序 运行 网络摄像头馈送 WHILE 同时显示传感器读数。 目前我的 SIMPLIFIED 代码如下:

class start_workout_session():

def pushup(self):
   
    #cam start here ~~!!
    cap = cv2.VideoCapture(0)

    with mp_pose.Pose(min_detection_confidence=1.5, min_tracking_confidence=1.5) as pose:

        while cap.isOpened():
           
            # Extract landmarks
            try:
             
               calculate angle here

               Showing angle in frame by using putText method from cv2
               
               Curl counter logic

               Render curl counter

                t1 = threading.Thread(target=arduino)
                t1.start()
    
               cv2.imshow('i-Trainer', image)

        cap.release()
        cv2.destroyAllWindows()



def arduino():
serialInst = serial.Serial()
serialInst.baudrate = 9600
serialInst.port = 'COM3'
serialInst.open()
while True:
    if serialInst.inWaiting:
        packet = serialInst.readline()
        print(packet.decode('utf').rstrip('\n'))

time.sleep(1)

t2 = threading.Thread(target=pushup)
t2.start()
t1.join()
t2.join()

这个程序可以运行但是总是提示错误:

File "C:\Users\..\main.py", line 629, in arduino
    serialInst.open()



File "C:\Users\..\Python36\lib\site-packages\serial\serialwin32.py", line 64, in open
    raise SerialException("could not open port {!r}: {!r}".format(self.portstr, ctypes.WinError()))
serial.serialutil.SerialException: could not open port 'COM3': PermissionError(13, 'Access is denied.', None, 5)

感谢@cguk70,

我设法解决了这个问题,把

 t1 = threading.Thread(target=arduino)
                t1.start()

外面还有

#cam start here ~~!!
    cap = cv2.VideoCapture(0)

原因是我正在相机循环中创建一个新的 Arduino 线程。所以第二次你会尝试再次打开串行端口并得到错误,因为它已经打开了。