在Python中,如何每X分钟在后台线程中调用一个特定的方法?

在Python中,如何每X分钟在后台线程中调用一个特定的方法?,python,multithreading,background-thread,Python,Multithreading,Background Thread,如何用Python编写一个后台线程,它将每隔几分钟调用一个特定的方法 比方说,如果我第一次启动我的程序,那么它应该立即调用该方法,然后,它应该每X分钟继续调用该方法 可以用Python来做吗 我在Python线程方面没有那么多经验。在Java中,我可以使用TimerTask或ScheduledExecutors来解决这个问题,但不确定如何使用Python 在Python中执行此操作的最佳方法是什么?使用 例如: import threading def print_hello(): p

如何用Python编写一个后台线程,它将每隔几分钟调用一个特定的方法

比方说,如果我第一次启动我的程序,那么它应该立即调用该方法,然后,它应该每X分钟继续调用该方法

可以用Python来做吗

我在Python线程方面没有那么多经验。在Java中,我可以使用
TimerTask
ScheduledExecutors
来解决这个问题,但不确定如何使用Python

在Python中执行此操作的最佳方法是什么?

使用

例如:

import threading

def print_hello():
    print('Hello')
    timer = threading.Timer(2, print_hello) # # Call `print_hello` in 2 seconds.
    timer.start()

print_hello()

我认为,如果不尝试使用
计时器
,这会容易得多。直接做:

def my_background_task(seconds_between_calls):
    from time import sleep
    while keep_going:
        # do something
        sleep(seconds_between_calls)


...
from threading import Thread
t = Thread(target=my_background_task, args=(5*60,)) # every 5 minutes
keep_going = True
t.start()
...
# and when the program ends
keep_going = False
t.join()

我在这门课上运气很好。您可能希望在.sleep()之前移动self.func()调用


不知怎的,当我运行上面的代码时,我看到Hello被打印了两次,每次都是在2秒钟后,但是在那之后它没有打印出任何内容。@SSH,对不起,我在
线程方面出错了。Timer
。它只运行该函数一次。我更新了答案。现在它起作用了。在最后一行使用time.sleep(100)有什么意义吗?@SSH,啊。。你不需要它。移除它。
import threading
import time

class PeriodicExecutor(threading.Thread):

    def __init__(self, sleep, func, *params):
        'Execute func(params) every "sleep" seconds'
        self.func = func
        self.params = params
        self.sleep = sleep
        threading.Thread.__init__(self, name = "PeriodicExecutor")
        self.setDaemon(True)

    def run(self):
        while True:
            time.sleep(self.sleep)
#           if self.func is None:
#               sys.exit(0)
            self.func(*self.params)