同时运行两个函数
Posted
技术标签:
【中文标题】同时运行两个函数【英文标题】:Run two function concurrently 【发布时间】:2021-02-02 22:37:09 【问题描述】:我已经定义了几个函数。
def func1():
'''something goes here'''
def func2():
'''something goes here'''
def func3():
'''something goes here'''
def func4():
'''something goes here'''
所以问题是:我想一直运行func1()
,如果我们在func1()
运行时调用该函数,其他函数(func2()
、func3()
、func4()
)应该可用。 我 不 想要func2()
、func3()
、func4()
运行,除非用户调用。这怎么能做到?
这是我到目前为止所做的事情
if __name__ == '__main__':
Thread(target=func1()).start()
这里我启动了函数func1()
。意味着当函数 func1()
运行时,如果用户调用其他函数它应该运行,否则不会运行
我已经提到了一些线程和多处理,但仍然无法得到答案。可能吗?如果是这样,请以正确的方式指导我。
提前致谢
【问题讨论】:
这能回答你的问题吗? Python Time Delays 只需使用 threading.Timer。 @mkam,是的,可以在func1()
中完成。但这不是我的问题。抱歉,如果我现在不清楚,我已经编辑了问题。
@AliTou 是的,可以在func1()
中完成。但这不是我的问题。抱歉,如果我现在不清楚,我已经编辑了问题。
代码中的一个明显错误是,要启动您需要Thread(target=func1).start()
的线程 - 即target
应该引用函数而不是调用它(不是func1()
)
【参考方案1】:
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'''
【讨论】:
对不起,如果我不清楚。这不是我的问题,请参考我更新的问题【参考方案2】:根据您指定的内容,这是代码。 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")
【讨论】:
【参考方案3】:假设您在 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()
或任何你想要的。看:
【讨论】:
【参考方案4】:您的代码中的一个明显错误是启动您需要的线程
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()
【讨论】:
以上是关于同时运行两个函数的主要内容,如果未能解决你的问题,请参考以下文章
为啥框架集中两个子页面不能同时运行settimeout或者setInterval函数