gpt4 book ai didi

multithreading - 无限循环是基于目录中文件更改进行处理的最佳解决方案

转载 作者:行者123 更新时间:2023-12-03 13:19:41 26 4
gpt4 key购买 nike

我正在编程一个将文件添加到处理链的工具。我想每10秒监视一个特定的已知目录,进行比较,然后将结果发送到我已经存在的函数中。

我写了一个简短的课:

class Watchdog(Thread):

def __init__(self, path):
""" Constructor """
self.watch_folder = path
self.verbose = True

pass

def run(self):
"""
we check every 10s
"""
sleep_duration = 10
before = dict ([(f, None) for f in os.listdir (self.watch_folder)])

while True:
time.sleep(sleep_duration)
after = dict ([(f, None) for f in os.listdir (self.watch_folder)])

added_files = [f for f in after if not f in before]
removed_files = [f for f in before if not f in after]

if added_files and self.verbose:
print "Added: ", ", ".join (added_files)
if removed_files and self.verbose:
print "Removed: ", ", ".join (removed_files)


before = after
return added_files

我知道由于无休止的循环,我无法轻松地返回数据。特别是因为该程序的其余部分势在必行
if __name__ == '__main__':
functionA()

do_smth()

# added_files is returned from the Thread and ideally changing.
if added_files >= n:
for file in added_files:
# happycode goes here, but how do I know about the change each time?

特别是:我可以简单地(不使用队列模型或任何复杂的东西)从线程返回吗?一旦线程可以报告更改,我想启动处理功能(所以这是我的观察者)。

我想知道是否有一种更简单的方法可以从无限循环中返回,从而使程序的其余部分保持必要性。

最佳答案

  • 这是一篇关于您正在寻找的好文章(对于python,您很幸运)

  • http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html
  • 或者,如果这是用于像OS
  • 这样的linux/linux,我将在python中使用'find -mtime n'linux命令。

    编辑:我知道1和2,不要在无限循环上回答您的问题,但可以选择。还,
  • http://linux.die.net/man/1/dnotify也可以替代

  • 希望这可以帮助

    关于multithreading - 无限循环是基于目录中文件更改进行处理的最佳解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28347465/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com