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

时间:2014-01-01 06:01:14

标签: python multithreading background-thread

如何在Python中编写后台线程,每隔几分钟就会继续调用一个特定的方法。

让我们说,如果我是第一次启动我的程序,那么它应该立即调用该方法,之后,它应该每隔X分钟继续调用该方法吗?

可以用Python做吗?

我对Python线程没有太多经验。在Java中,我可以使用TimerTaskScheduledExecutors解决此问题,但不确定如何使用Python进行此操作?

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

3 个答案:

答案 0 :(得分:2)

使用threading.Timer

例如:

import threading

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

print_hello()

答案 1 :(得分:0)

我认为如果不尝试使用Timer,这会更容易。直接做:

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

答案 2 :(得分:0)

我在这堂课上好运。您可能希望在time.sleep()之前调用self.func()。

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)