Python 如何在raspberry pi上使用多线程进行LCD输出
写入raspberryp pi上的16x2 LCD显示屏可能需要一段时间才能完成,尤其是我编写的模块会自动滚动超出显示屏长度的文本 我需要使用多线程或类似的方法,将输出发送到显示器并继续程序的其余部分。我已经尝试了一些多线程的方法,但还没有完全实现 这是没有任何多线程的工作代码。我想要的多线程方法是“TextToLCD.ProcessFrameBuffer” 皮贝尔Python 如何在raspberry pi上使用多线程进行LCD输出,python,multithreading,python-3.x,raspberry-pi3,lcd,Python,Multithreading,Python 3.x,Raspberry Pi3,Lcd,写入raspberryp pi上的16x2 LCD显示屏可能需要一段时间才能完成,尤其是我编写的模块会自动滚动超出显示屏长度的文本 我需要使用多线程或类似的方法,将输出发送到显示器并继续程序的其余部分。我已经尝试了一些多线程的方法,但还没有完全实现 这是没有任何多线程的工作代码。我想要的多线程方法是“TextToLCD.ProcessFrameBuffer” 皮贝尔 首先,很高兴看到你的LCD功能。 您正在使用硬件,因此硬件是有限的资源。 为此,您需要某种访问控制,这可以通过一个或多个对象来实现
首先,很高兴看到你的LCD功能。 您正在使用硬件,因此硬件是有限的资源。 为此,您需要某种访问控制,这可以通过一个或多个对象来实现 使用显示器时有两种选择:
import threading
import time
def parallelWithLock(lock:threading.Lock, name:str):
with lock:
for i in range(5):
print(f"{name}: {i}")
time.sleep(0.5)
# doWantYouWant(...)
def parallelWithInterrupt(event:threading.Event,lock:threading.Lock,name:str):
event.set()
i = 0
with lock:
event.clear()
while True:# or writing
if event.isSet():
print(f"{name} Interrupted!")
break
print(f"{name}: {i}")
time.sleep(1)
i += 1
#doWantYouWant(...)
if __name__ == '__main__':
lock = threading.Lock()
t1 = threading.Thread(target=parallelWithLock,args=(lock,"Thread_1"))
t2 = threading.Thread(target=parallelWithLock,args=(lock,"Thread_2"))
t1.start()
t2.start()
t1.join()
t2.join()
event = threading.Event()
lock = threading.Lock()
t3 = threading.Thread(target=parallelWithInterrupt,args=(event,lock,"Thread_3"))
t4 = threading.Thread(target=parallelWithInterrupt,args=(event,lock,"Thread_4"))
t5 = threading.Thread(target=parallelWithInterrupt, args=(event,lock, "Thread_4"))
t3.start()
time.sleep(5)
t4.start()
time.sleep(3)
t5.start()
t3.join()
t4.join()
time.sleep(2)
event.set()
t5.join()
至少,您需要包含
TextToLCD.ProcessFrameBuffer
——以及整个TextToLCD
模块的代码……但不要麻烦,因为stackoverflow不是一个代码编写服务。建议你试着自己写代码,如果你不能让它工作,然后问一个特定的问题。我确实自己写了TextToLCD模块。如果你愿意,我可以把它寄出去。一开始我没有包括它,因为我认为它没有必要。正如我所说的,不要麻烦(只是这样做)。可能更容易使用,而不是线程化。
import threading
import time
def parallelWithLock(lock:threading.Lock, name:str):
with lock:
for i in range(5):
print(f"{name}: {i}")
time.sleep(0.5)
# doWantYouWant(...)
def parallelWithInterrupt(event:threading.Event,lock:threading.Lock,name:str):
event.set()
i = 0
with lock:
event.clear()
while True:# or writing
if event.isSet():
print(f"{name} Interrupted!")
break
print(f"{name}: {i}")
time.sleep(1)
i += 1
#doWantYouWant(...)
if __name__ == '__main__':
lock = threading.Lock()
t1 = threading.Thread(target=parallelWithLock,args=(lock,"Thread_1"))
t2 = threading.Thread(target=parallelWithLock,args=(lock,"Thread_2"))
t1.start()
t2.start()
t1.join()
t2.join()
event = threading.Event()
lock = threading.Lock()
t3 = threading.Thread(target=parallelWithInterrupt,args=(event,lock,"Thread_3"))
t4 = threading.Thread(target=parallelWithInterrupt,args=(event,lock,"Thread_4"))
t5 = threading.Thread(target=parallelWithInterrupt, args=(event,lock, "Thread_4"))
t3.start()
time.sleep(5)
t4.start()
time.sleep(3)
t5.start()
t3.join()
t4.join()
time.sleep(2)
event.set()
t5.join()