在python中的线程之间通信数据

时间:2018-07-09 09:41:23

标签: multithreading python-3.x python-multithreading

我正在使用python做一个项目。由于我是python的新手,所以我对python中的线程的了解很少。这是我的示例代码。

import threading
from threading import Thread
import time

check = False

def func1():
    print ("funn1 started")
    while check:
        print ("got permission")

def func2():
    global check
    print ("func2 started")
    time.sleep(2)
    check = True
    time.sleep(2)
    check = False

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()

我想要的是看到“获得许可”作为输出。但是用我当前的代码却没有发生。我假设在func1func2的值更改为check之前关闭True线程。

我如何保持func1的生命。 我在互联网上进行了研究,但找不到解决方案。 谁能帮我。 任何帮助将是巨大的 预先谢谢!!!!

3 个答案:

答案 0 :(得分:1)

这里的问题是func1在while循环中执行检查,发现它为假,然后终止。因此,第一个线程无需打印“获得许可”即可结束。

我认为这种机制并不是您所需要的。我会选择使用这样的条件,

import threading
from threading import Thread
import time

check = threading.Condition()

def func1():
    print ("funn1 started")
    check.acquire()
    check.wait()
    print ("got permission")
    print ("funn1 finished")


def func2():
    print ("func2 started")
    check.acquire()
    time.sleep(2)
    check.notify()
    check.release()
    time.sleep(2)
    print ("func2 finished")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()

这里,条件变量在内部使用互斥量在线程之间进行通信;因此,一次只有一个线程可以获取条件变量。第一个函数获取条件变量然后释放它,但是注册它要等待,直到它通过条件变量接收到通知为止。然后,第二个线程可以获取条件变量,并在完成条件所需的操作后,通知等待线程它可以继续。

答案 1 :(得分:0)

from threading import Thread
import time

check = False

def func1():
    print ("funn1 started")
    while True:
        if check:
            print ("got permission")
            break

def func2():
    global check
    print ("func2 started")
    time.sleep(2)
    check = True
    time.sleep(2)
    check = False

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()

答案 2 :(得分:0)

func1必须是这样

def func1():
    print("func1 started")
    while True:
        if check:
            print("got permission")
            break
        else:
            time.sleep(0.1)