Python中文
首页
教程
问答
标签
搜索
登录
注册
使用Python监视程序生成多个观察者
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我现在有一个基本的运行脚本,它监视单个目录和下面所有子目录的更改,并将输出传递给LoggingEventHandler。</p> <p>现在我想扩展我的脚本来监视3个独立的位置,但是我无法理解如何生成多个观察者来监视我指定的每个路径。</p> <p>我做了如下尝试:</p> <pre><code>import time import thread import threading from watchdog.observers import Observer from watchdog.events import LoggingEventHandler event_handler = LoggingEventHandler() observer = Observer() paths = ["C:\dir1", "C:\dir2", "C:\dir3"] for i in paths: targetPath = str(i) observer.schedule(event_handler, targetPath, recursive=True) observer.start_new_thread() </code></pre> <p>不幸的是,我收到一个错误,指出observer没有“start_new_thread”属性</p> <p>文档中没有显示多个监视目录的观察者的示例。我没有处理线程的经验,我甚至不确定我是否在正确的轨道上。</p> <p>我应该为每个路径创建一个新的observer类实例吗?或者,是否有某种方法为观察者类的单个实例提供多条路径?</p> <p>如果有明显的答案,请道歉。我确信现在这一切都是完全错误的,我只是太累了,无法理解。</p> <p>附加:</p> <p>多亏了@FogleBird,我已经纠正了线程启动的问题,但是我仍然只能使用一个实例,而不是三个单独的观察者来观察不同的路径。我修改后的代码现在看起来像:</p> <pre><code>threads = [] for i in paths: targetPath = str(i) observer.schedule(event_handler, targetPath, recursive=True) threads.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(observer) observer.start() print threads </code></pre> <p>这将返回三个观察到的监视对象,但它们都具有相同的详细信息:</p> <pre><code>[<Observer(Thread-1, started daemon 1548)>, <Observer(Thread-1, started daemon 1548)>, <Observer(Thread-1, started daemon 1548)>] </code></pre> <p>看来还是完全错了,再帮帮忙就好了。我正在努力理解这个概念。</p> <p>附加2:</p> <p>我一直在纠结于代码,现在我有了一些功能性的东西:</p> <pre><code>event_handler = LoggingEventHandler() N2watch = Observer() threads = [] for i in paths: targetPath = str(i) N2watch.schedule(event_handler, targetPath, recursive=True) threads.append(N2watch) N2watch.start() try: while True: time.sleep(1) except <a href="https://www.cnpython.com/pypi/keyboard" class="inner-link">keyboard</a>Interrupt: N2watch.stop() N2watch.join() </code></pre> <p>从我可以从一个初始运行中收集到的信息来看,输出似乎在我的列表中指定的所有三个路径名中都有变化,但是我需要编写一些测试代码来检查。</p> <p>我仍然不确定这是如何表现的,所以任何进一步的评论将是伟大的。</p> <p>干杯。</p> <p>附加3:</p> <p>我将FogleBird的答案标记为最好的,因为它只是唯一的一个,并且突出了我的初始代码的问题。</p> <p>我以前的编辑包含了监视多个位置的完整工作代码,目前看来运行正常。</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>只想加上几条:</p> <p>代码中的线程库和线程列表对于刚开始使用watchdog(包括我自己)的人来说可能有点混乱。它们实际上不是解决方案中所必需的。一个简单的解释是:</p> <ul> <li>创建一个观察者</li> <li>安排多个“观看活动”</li> <li>启动观察者。</li> </ul> <p>就这样。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
上传图片使用Django Ckeditor获取服务器错误(500)
5 回答
上传图片到 Google App Engine,来自非网页客户端
4 回答
上传图片到Djang的cloudinary
3 回答
上传图片到Flask
2 回答
上传图片到googleappengine并与用户分享图片
7 回答
上传图片到googlecolab,并使用Keras预测分类
4 回答
上传图片到s3python
2 回答
上传图片到s3后,上传附带的拇指
6 回答
上传图片在Django,希望是一个循序渐进的指南?
8 回答
上传图片并显示在Django 2.0模板上
10 回答
上传图片时创建动态路径
3 回答
上传多个图像会破坏除第一个Flas之外的所有内容
1 回答
上传多个文件上传文件FastAPI
3 回答
上传多个文件到Django
5 回答
上传多张图片
4 回答
上传大数据到谷歌硬盘给400
5 回答
上传大文件nginx+uwsgi
7 回答
上传大文件不工作谷歌驱动Python API
1 回答
上传大文件到S3
3 回答
上传大文件太慢
10 回答