我使用了raspberry pi3,python 2.7和OpenCV3
我有两个功能:
Func1()
运行Picamera
Func2()
推动马达前进
我的问题是:当我运行Func2()
时Func1()
暂时停止,直到Func2()
完成,尽管我为每个函数使用了单独的线程。
我的代码是:
def picam():
t1=threading.thread(target=Func1())
t1.start()
t1.join()
def move():
t2=threading.thread(target=Func2())
t2.start()
t2.join()
在我的GUI中我有2个按钮。一个调用picam()和其他调用move()
有什么问题?我不需要Func1()
暂时停止,因为相机也会暂时停止。
答案 0 :(得分:0)
我提供这个答案,因为线程真的是一个难题。问题的一部分,特别是对于初学者来说,是不透明术语的Catch 22,这使得很难理解不同组件在你不了解的情况下会做些什么。
您的问题在于如何使用join
。 join
是一种等待给定线程完成的方法。因此,t1.start()
之后立即调用t1.join()
会使主线程等待t1
完成。
除了你开始使用几个单独的线程之外,你的代码几乎完全等同于
Func1()
Func2()
在主线程中。
如果您希望它们同时运行,则应在两个线程启动后放置join
:
t1=threading.thread(target=Func1())
t2=threading.thread(target=Func2())
t1.start()
t2.start()
t1.join()
t2.join()
这将创建两个线程,启动它们,然后等待两个线程完成。