我的程序目前看起来像这样:
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()的线程。
答案 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()