同时运行两个功能

问题描述

我定义了几个功能

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()或任何您想要的东西。看:

enter image description here

,

代码中一个明显的错误是启动所需的线程

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