暂停从线程生成的线程中的整个程序

时间:2017-09-10 10:39:40

标签: python multithreading

我的程序目前看起来像这样:

from threading import Thread
import time

def something():
    time.sleep(10)

def function1():
    if condition1:
        Thread(target=something).start()


def function2():
    if condition2:
        Thread(target=something).start()

def function3():
    if condition3:
        Thread(target=something).start()

def main():
    Thread(target=function1).start()
    Thread(target=function2).start()
    Thread(target=function3).start()

main()

如果函数1已经生成了一个调用something()的线程,我不希望函数2和3生成另一个调用something()的线程。

2 个答案:

答案 0 :(得分:1)

实际上代码只创建了三个独立的线程,然后这些线程中的每一个都可以创建另一个线程做某事,但又完全相互独立(所以最多得到3个soemthing线程)。 现在你要求这些线程以某种方式进行交互:""应该只执行一次。因此线程"东西"必须只实例化一次,并且必须使用锁来保护呼叫。函数线程必须知道"某些东西"线程,所以你需要创建"某事" main()中的线程并将其传递给函数线程。 总而言之,我不确定这会给出一个简单的程序结构,并且修改你想要实现的目标可能是好的。

答案 1 :(得分:1)

尝试以下伪代码:

import threading
import time

lock = threading.Lock()


def something():
    time.sleep(10)


def function1():
    if condition1 and lock.acquire(timeout=5):
        threading.Thread(target=something).start()


def function2():
    if condition2 and lock.acquire(timeout=5):
        threading.Thread(target=something).start()


def function3():
    if condition3 and lock.acquire(timeout=5):
        threading.Thread(target=something).start()


def main():
    threading.Thread(target=function1).start()
    threading.Thread(target=function2).start()
    threading.Thread(target=function3).start()


main()