Jai*_*ime 2 python multithreading semaphore
我有一个使用串口(唯一资源)的Python进程,它使用类A的实例进行管理.使用类B和C的实例初始化了两个不同的线程,它们不断使用串口资源反对已经创造了.
import threading
Class A(threading.Thread):
#Zigbee serial port handler
def __init__(self,dev):
#something here that initialize serial port
def run():
while True:
#listening serial interface
def pack(self):
#something
def checksum(self):
#something
def write(self):
#something
Class B(threading.Thread):
def __init__(self,SerialPortHandler):
self.serialporthandler=SerialPortHandler
def run(self)
while True:
#something that uses self.serialporthandler
Class C(threading.Thread):
def __init__(self,SerialPortHandler):
self.serialporthandler=SerialPortHandler
def run(self)
while True:
#something that uses self.serialporthandler
def main():
a=A('/dev/ttyUSB1')
b=B(a)
b.start()
c=C(a)
c.start()
if __name__=='main':
while True:
main()
Run Code Online (Sandbox Code Playgroud)
问题是两个线程都试图同时访问串行资源.我可以使用同一个类A的几个实例,在敏感部分附加Lock.acquire()和Lock.release().
你们有些人能指出我的正确方法吗?
先感谢您.
Eli*_*sky 12
虽然你可以使用适当的锁定共享串口,但我不推荐它.我已经编写了几个在Python的串口上进行通信的多线程应用程序,根据我的经验,以下方法更好:
Queue或两个对象管理实际的串行端口通信:
使用Queue对象将大大简化您的代码并使其更加健壮.
这种方法在设计方面为您提供了很多可能性.例如,您可以使用串行线程管理器注册事件(回调),并在发生有趣事件时让它(以同步方式)调用它们等.
| 归档时间: |
|
| 查看次数: |
8603 次 |
| 最近记录: |