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



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

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已经催生了一个呼叫things()的线程,那么我不希望函数2和3来产生另一个线程调用某物()。

实际上,代码仅创建三个独立的线程,然后每个线程都可以创建另一个线程,但是又可以完全独立于彼此(因此,在最大值处获得3个Soemthing线程)。现在,您要求这些线程以某种方式进行交互:"某物"应仅执行一次。因此,线程"某物"必须仅一次性实例化,并且必须用锁定呼叫。函数线程必须知道"某物"线程,因此您需要在main()中创建"某物"线程并将其传递到函数线程。总而言之,我不确定这会提供一个简单的程序结构,并且可以修改您想要实现的目标可能是一件好事。

尝试以下伪代码:

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()

最新更新