我有一个流媒体程序,它将 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 毫秒(应该足以为其他线程提供执行时间,并且不会对用户体验产生太大影响。
通常使用探查器来检查程序花费的时间。