问题描述
我定义了几个功能。
def func1():
'''something goes here'''
def func2():
'''something goes here'''
def func3():
'''something goes here'''
def func4():
'''something goes here'''
所以问题是:我想一直运行func1()
,如果我们在{时调用该函数,则其他函数(func2()
,func3()
,func4()
)应该可用{1}}正在运行。 我 不要 要运行func1()
,func2()
,func3()
,除非用户致电。如何做到这一点?
这是我到目前为止所做的
func4()
在这里我启动了功能if __name__ == '__main__':
Thread(target=func1()).start()
。意味着如果用户调用其他功能,则功能func1()
在运行时应该运行,否则应运行
我已经介绍了一些线程和多处理程序,但仍然无法得到答案。可能吗?如果是这样,请以正确的方式指导我。
预先感谢
解决方法
threading.Timer应该可以解决问题:
from threading import Timer
def func1():
t = Timer(60.0,func2)
t.start() #func2 will be called 60 seconds from now.
def func2():
'''something goes here'''
def func3():
'''something goes here'''
def func4():
'''something goes here'''
,
根据您的指定,这是代码。 func1()
由线程执行,并且继续执行。用户指定的输入将触发其余功能。
from threading import Thread
def func1():
'''do something'''
func1() #recursive call to keep it running
def func2():
'''something goes here'''
def func3():
'''something goes here'''
def func4():
'''something goes here'''
if __name__ == '__main__':
Thread(target=func1).start()
while True:
n = input("Enter Command: ")
if n=="func2":
func2()
elif n=="func3":
func3()
# add your cases
else:
print("Invalid Input")
,
假设您正在Python交互式控制台中执行此操作。如果您这样做:
from threading import Timer
def func2():
print("func2 called")
def func1():
print("func1 called")
t = Timer(60.0,func2)
t.start()
现在控制台是免费的,并显示提示。 func2
将在60.0
秒后执行,您可以调用func1()
或任何您想要的东西。看:
代码中一个明显的错误是启动所需的线程
Thread(target=func1).start()
即目标应引用该函数不要调用它(不是func1()
)。因此,代码应为:
from threading import Thread
import time
def func1():
while True:
print('Running func1')
time.sleep(60)
def func2():
'''something goes here'''
print('func2 called')
def func3():
'''something goes here'''
print('func3 called')
def func4():
'''something goes here'''
print('func4 called')
if __name__ == '__main__':
Thread(target=func1).start()
func2()
func3()
func4()