我的程序当前看起来像这样:
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()