同时运行两个函数

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

【讨论】:

以上是关于同时运行两个函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 c++ winform 中同时运行两个函数?

同时运行两个线程

c++多线程同时运行两个函数该怎样编程啊?

为啥框架集中两个子页面不能同时运行settimeout或者setInterval函数

eclipse中是可以运行多个项目的。比如c-s两个同时运行。

如何打开网业同时运行两个JS函数 给我举个例最好了谢谢!