我正在努力找到解决我遇到的问题的方法......
我有一个很大的份额,包含数十万(如果不是数百万)的文件和每秒到达的新文件。
我正在尝试编写一个应用程序,它可以更快地在共享中查找文件,我的想法是将所有文件名插入到Redis DB中,格式为:
{'file_name','file_path'}
并且需要一个文件从DB中提取其路径...
当我尝试索引所有旧文件(我假设它至少需要几个小时)时,问题就开始了,同时simeltanious听取在此过程中到达的新文件。
这是我正在尝试做的一个例子:
import redis
import os
r = redis.StrictRedis(host='localhost',port=6379,db=0)
for root, dirs, files in os.walk(r'D:\\'):
for file in files:
r.set(os.path.basename(file),os.path.join(root, file))
print 'The file %s was succefuly added' %os.path.basename(file)
我应该如何修改我将继续收听新文件的代码?
感谢您的帮助!=)
答案 0 :(得分:0)
您应该查看watchdog库。它完全符合您的要求。以下是使用它的示例:
import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
path = sys.argv[1] if len(sys.argv) > 1 else '.'
event_handler = LoggingEventHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()