定时器没有重置

时间:2017-01-28 04:08:09

标签: python multithreading python-3.x timer

我有一个简单的程序来检测何时在目录中创建文件。如果有新文件,应该每分钟检查一次,如果没有新文件则重置计时器。

import os
import threading
import time
import sys

def detector():
    filenames = os.listdir('/home/username/Documents/')
    if filenames:
        for i in filenames:
            #do things
    print('I started a thread!')
    sys.stdout.flush()
    threading.Thread(target=start_timer).start()
def start_timer():
    print('I started a threaded timer at', t.ctime())
    sys.stdout.flush()
    threading.Timer(60, detector)
#UI stuff here

在目录中没有文件的情况下运行时,脚本只会输出:

I started a thread!
I started a timer at [insert time here]

但只有一次。这让我觉得我的线程有问题(我之前从未使用过线程)。我不知道它是否必须是线程化的,但是程序不能等待正常的计时器,因为计时器使UI挂起直到计时器完成。

1 个答案:

答案 0 :(得分:1)

以下是我认为你想要的一个简单例子:

import os
import threading


def list_dir(my_dir, secs):

    filenames = os.listdir(my_dir)
    # print(filenames)

    # Do your stuff here!!!

    # Setting a new timer: call list_dir in secs seconds
    threading.Timer(secs, list_dir, args=[my_dir, secs]).start()

def start_timer():
    print('timer started!')
    seconds = 60  # 60 seconds
    directory = "/my/beloved/dir"  # insert here the directory
    threading.Timer(seconds, list_dir, args=[directory, seconds]).start()


start_timer()

请注意Timer仅调用一次回调(在您指定为第一个参数的秒数之后),这就是我们在Timer内创建并启动另一个list_dir的原因。