计时器 *args, **kwargs in while 在第一次迭代后变为空

Timer *args, **kwargs in while gets null after first iteration

我做了一个不起作用的重复计时器,第一次迭代起作用了,但后来它说 args 和 kwargs 是 NoneType,即使它第一次起作用了:

'NoneType' object is not callable

timer.py:

from threading import Timer

class repeat_timer(Timer):
    def run(self):
        while not self.finished.wait(self.interval):
            try:
                self.function(*self.args, **self.kwargs)
            except Exception as e:
                print("______EXCEPTION IN TIMER_______")
                print(e)

我是这样称呼它的:

from timer import repeat_timer

timer = repeat_timer(delay, process_multiple_files(filter_json_path))
timer.run()

delay 只是一个整数,每个 运行 之间有秒数。 process_multiple_files(filter_json_path) 是检查文件并上传到数据库的函数。 filter_json_path 是一个带有 json 文件路径的字符串

我不知道从哪里开始,因为它第一次运行完美,但第二次运行不正常?

为了阐明计时器的工作原理,它会在 delay 的每 X 秒内尝试 运行 代码 问题是当 self.function(*self.args, **self.kwargs) 是 运行 并在第二次触发时给出异常 'NoneType' object is not callable,所以第一个 运行 一切都很好,但在那之后它 运行s 但如上所述出现异常。

你需要这样称呼它:

from timer import repeat_timer

timer = repeat_timer(delay, process_multiple_files, filter_json_path)
timer.run()

process_multiple_files 是您希望定时器调用的函数,filter_json_path 是调用时应传递的参数

https://docs.python.org/3/library/threading.html#timer-objects

class threading.Timer(interval, function, args=None, kwargs=None)
Create a timer that will run function with arguments args and keyword arguments kwargs, after interval seconds have passed. If args is None (the default) then an empty list will be used. If kwargs is None (the default) then an empty dict will be used.