在树莓派上运行两个线程时出现问题



我有一个流媒体程序,它将 picamera 拍摄的捕获视频帧从树莓发送到服务器,另一个程序从服务器接收一些字符。 当我单独运行它们时,没有问题,但我希望它们同时运行它们以执行某些功能,例如"a"按下服务器,所以我将它们线程化,但它使流式传输如此缓慢。有没有解决这个问题的解决方案?

server.py:

def get_input(c):
#getting input characters from keyboard and send them to raspberry 
def get_video(c):
#getting video frames form raspberry 
thread.start_new_thread(get_video, ("2",))
thread.start_new_thread(get_input, ("1",))
while 1:
pass

raspberry.py:

def get_input(c):
#getting input chars from server
def send_video(c):
#sending video frames to server
thread.start_new_thread(send_video, ("2",))
thread.start_new_thread(get_input, ("1",))
while 1:
pass

为了解决问题,您首先需要找出它的原因是什么。

这里一个明显的问题是这段代码:

while 1:
pass

执行繁忙循环。因此,它使用 CPU 资源,但没有任何实质性作用。您可以在那里用sleep(0.1)替换pass或等待线程完成(但是,这需要切换到线程模块(

另一个可能的问题可能是get_input中的类似问题(您尚未显示其来源(。确保您没有任何忙于在那里等待。一些小sleep(50-100 毫秒(应该足以为其他线程提供执行时间,并且不会对用户体验产生太大影响。

通常使用探查器来检查程序花费的时间。

最新更新