Python多进程应用程序访问相同的共享库调用
在我的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
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
,一个锁就足够了。最后,我们还需要更多关于“突然停止”真正含义的信息。