当其他线程在Raspbian中启动时临时停止到线程的存在

时间:2017-01-30 17:38:10

标签: multithreading python-2.7 raspbian

我使用了raspberry pi3,python 2.7和OpenCV3

我有两个功能:

  1. Func1()运行Picamera

  2. Func2()推动马达前进

  3. 我的问题是:当我运行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()暂时停止,因为相机也会暂时停止。

    enter image description here

1 个答案:

答案 0 :(得分:0)

我提供这个答案,因为线程真的是一个难题。问题的一部分,特别是对于初学者来说,是不透明术语的Catch 22,这使得很难理解不同组件在你不了解的情况下会做些什么。

您的问题在于如何使用joinjoin是一种等待给定线程完成的方法。因此,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()

这将创建两个线程,启动它们,然后等待两个线程完成。