我有一个简单的程序来检测何时在目录中创建文件。如果有新文件,应该每分钟检查一次,如果没有新文件则重置计时器。
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挂起直到计时器完成。
答案 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
的原因。