Python多进程应用程序访问相同的共享库调用

Python多进程应用程序访问相同的共享库调用,python,multithreading,ubuntu,multiprocessing,Python,Multithreading,Ubuntu,Multiprocessing,在我的python程序中,我试图在不同的线程中调用共享库函数,但几秒钟后它就停止了。有什么问题吗 def FnVDC1(l, delay): while True: l.acquire() try: ret_check = libCAN.WriteCANMessage(handle, byref(VDC1)) finally: l.release() time.slee

在我的python程序中,我试图在不同的线程中调用共享库函数,但几秒钟后它就停止了。有什么问题吗

def FnVDC1(l, delay): 
    while True:   
        l.acquire()
        try:
            ret_check = libCAN.WriteCANMessage(handle, byref(VDC1))
        finally:
            l.release()
        time.sleep(delay)

def FnEEC1( l, delay):    
    while True:   
        l.acquire()
        try:
            ret_check = libCAN.WriteCANMessage(handle, byref(EEC1))
        finally:
            l.release()
        time.sleep(delay)

if __name__ == '__main__':
    lock = RLock()
    ThVDC1 = multiprocessing.Process(name='VDC1', target=FnVDC1, args=(lock,.200))
    ThEEC1 = multiprocessing.Process(name='EEC1', target=FnEEC1, args=(lock,.250))

    ThVDC1.start()
    ThEEC1.start()

因此,两个线程分别以200ms和250ms的间隔调用libCAN.WriteCANMessage。它工作几秒钟,然后突然停止。原因是什么?解决这个问题的正确方法是什么?我将再添加八个这样的线程。我正在使用Ubuntu操作系统。

你说的“它突然停止”是什么意思?RLock类来自哪里(请显示导入)?作为旁注,您可以在with语句中使用锁,以使代码略短/更可读。例如,带有l:do_stuff()的
,它将为您处理获取和释放锁的操作。@TomDalton来自多处理导入RLock@Tom道尔顿3我不明白“with 1”是如何解决线程停止问题的。事实并非如此,我只是说这是一种使用锁的更简洁的方法。另外,您不需要(从我所看到的)一个
RLock
,一个
锁就足够了。最后,我们还需要更多关于“突然停止”真正含义的信息。