1. 程式人生 > >python watchdog 幾種 Observer 原理 (linux 掛載(mount)無法正常監聽 )

python watchdog 幾種 Observer 原理 (linux 掛載(mount)無法正常監聽 )

Watchdog 幾種 Observer 型別

  • InotifyObserver
  • PollingObserver
  • WindowsApiObserver
  • FSEventsObserver
  • KqueueObserver

InotifyObserver

Linux系統用的, 觀察目錄的排程事件,效率比較高。 預設使用

WindowsApiObserver

Windows系統用的, 觀察目錄的排程事件,效率比較高。 預設使用

PollingObserver

與平臺無關,輪詢目錄以檢測檔案的更改,效率比較低。 如果上兩種方式在Linux 或 windows中有問題,可以使用該方法。

其他:

  • 不在做詳細講解

FSEventsObserver

用於 darwin(蘋果2000年開源一款操系統)

KqueueObserver

用於,darwin(蘋果2000年開源一款操系統) 和 bsd(伯克利Unix)

官方原始碼

# 是不是Linux系統
if platform.is_linux():
    try:
        from .inotify import InotifyObserver as Observer
    except UnsupportedLibc:
        from .polling import PollingObserver as Observer
# 判斷是不是darwin系統
elif platform.is_darwin(): # FIXME: catching too broad. Error prone try: from .fsevents import FSEventsObserver as Observer except: try: from .kqueue import KqueueObserver as Observer warnings.warn("Failed to import fsevents. Fall back to kqueue")
except: from .polling import PollingObserver as Observer warnings.warn("Failed to import fsevents and kqueue. Fall back to polling.") # 判斷是不是bsd系統 elif platform.is_bsd(): from .kqueue import KqueueObserver as Observer # 判斷是不是windows系統 elif platform.is_windows(): # TODO: find a reliable way of checking Windows version and import # polling explicitly for Windows XP try: from .read_directory_changes import WindowsApiObserver as Observer except: from .polling import PollingObserver as Observer warnings.warn("Failed to import read_directory_changes. Fall back to polling.") else: from .polling import PollingObserver as Observer

注意

在Linux系統中,如果無法監聽到檔案目錄的變化可以手動的把Observer修改為PollingObserver
Linux系統中的,掛載的目錄無法正常監聽可以使用下列方法

程式碼如下:

import sys
import time
import logging
# from watchdog.observers import Observer
from watchdog.observers.polling import PollingObserver
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 = PollingObserver()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

相關推薦

python watchdog Observer 原理 (linux 掛載(mount)無法正常 )

Watchdog 幾種 Observer 型別 InotifyObserver PollingObserver WindowsApiObserver FSEventsObserver KqueueObserver InotifyObserver Linux系

詳解單頁面路由的實現原理

htm 缺點 服務 ajax請求參數 重復 情況 路由 dem history 路由是每個單頁面網站必須要有的,本篇基本不會天貼代碼,只講原理,代碼在頁面底會有github地址,註意,一定要放在本地服務器裏跑(因為有AJAX) 眾所周知,單頁面網站的路徑跳轉全是通過JS來控

Linux進程間通信的方式總結--linux內核剖析(七)

字節流 標準 包含 down pro trac posix共享內存 ++ 實現 進程間通信概述 進程通信的目的 傳輸數據 一個進程須要將它的數據發送給還有一個進程。發送的數據量在一個字節到幾M字節之間 共享數據 多個進程想要操作共享

Python循環

無限 繼續 cond else語句 for語句 循環 elif pan 設定 1\if語句:if condition 是True,執行if clause語句,並跳過後面的elif或else語句;執行一次 2\while語句;只要while condition是True,就會

技術原理的初解 EJB spring springmvc

1.EJB技術 參考文章: EJB是sun的JavaEE**伺服器端元件模型,設計目標與核心應用是部署分散式應用程式。簡單來說就是把已經編寫好的程式(即:類)打包放在伺服器上**執行。憑藉java跨平臺的優勢,用EJB技術部署的分散式系統可以不限於特定的平臺。 EJB 是為了”服務叢

關於python資料視覺化圖形

python中我們一般用的最多的是matplotlib圖形庫,本人在寫文章,做報告時,深感matplotlib圖形比較單一化,這裡介紹幾種關於python的圖形庫 (1)seaborn 是基於matplotlib的高階版,主要針對的資料探勘和機器學習的變數特徵選取,可以用非常短小的程式碼就可

Python實現方式

Python自身作為一門程式語言,它有多種實現。這裡的實現指的是符合Python語言規範的Python解釋程式以及標準庫等。這些實現雖然實現的是同一種語言,但是彼此之間,特別是與CPython之間還是有些差別的。 下面分別列出幾個主要的實現。 1.CPython:這是Python

Python實現簡單的排序算法

第一個 出現 冒泡 列表 nbsp 工作 代碼實現 描述 false 一.冒泡排序 概念:為一個無序的列表排成有序的 實現過程描述:(升序)   1.比較相鄰的元素,如果第一個比第二個大,就交換他們的位置   2.對每一對相鄰元素重復1的工作,從開始第一隊到最後一對

Python實現簡單的排序演算法

一.氣泡排序 概念:為一個無序的列表排成有序的 實現過程描述:(升序)   1.比較相鄰的元素,如果第一個比第二個大,就交換他們的位置   2.對每一對相鄰元素重複1的工作,從開始第一隊到最後一對,最後結束的時候最大的數會在後面   3.針對所有元素重複1,2的工作,除了最後一個數,因為最後的數最大

python排序的演算法思想

1.氣泡排序法 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該 會是最大的數。 針對所有的元素重複以上的步驟,除了最後一個。 持續每次對越來越少的元素重複上面的步驟,直

bat批處理執行python方式 ———— 批處理, python打包成 exe檔案

第一種方式: @echo off C: cd C:\Users\ldl\Desktop start python test100.py start python 1.py start python 1.py 10 start python 1.py 100 exit 第二種方

Python常見方法實現斐波那契數列

Python常見斐波那契解決方案 n=35 #1.遞迴求斐波那契 def fibo(n): return 1 if n<3 else fibo(n-1)+fibo(n-2) print(fibo(n)) #2.迴圈求斐波那契 f1,f2=0,1 for i

python開啟檔案的方式(你習慣的不一定是最好的)

昨天看完了這本python進階,感覺這本書對我啟發很大,做了三張紙的筆記,方便我在遇到問題的時候翻閱,然後尋找可能的解決方案。作為一個使用python一年的小白,雖然說不是小白,但是這一年來基本上是用什麼學什麼,對python沒有系統的學習過,900多頁的厚

python字串的處理

1、list轉string字串      使用''.join(list) 例:      listA=['我'.'是','Python','菜鳥']     str = ''.join(listA)

Python筆記——Python執行時間的計算方法

首先說一下我遇到的坑,生產上遇到的問題,我排程Python指令碼執行並監控這個程序,python指令碼執行時間遠遠大於python指令碼中自己統計的程式執行時間。 監控python指令碼執行的時間是36個小時,而python指令碼中統計自己執行的時間是4個小時左右。 問題暴漏

python資料結構

列表:shoplist = ['apple', 'mango', 'carrot', 'banana'] 字典:di = {'a':123,'b':'something'} 集合:jihe = {'apple','pear','apple'} 元組: t = 123,456,'hello' 1.列表   

Linux程序間通訊的方式總結--linux核心剖析(七)

程序間通訊概述 程序通訊的目的 資料傳輸 一個程序需要將它的資料傳送給另一個程序,傳送的資料量在一個位元組到幾M位元組之間 共享資料 多個程序想要操作共享資料,一個程序對共享資料 通知事 一個程序需要向另一個或一組程序傳送訊息,通知它(它

細說linux掛載——mount,及其他……

純粹針對剛剛解封開包的新新手,老鳥們請自覺繞行,否則浪費你的時間你非要逼我做謀殺犯可不光我的事你還沒地方說理去。 如果你正好是個嶄新的新手,就耐心的花點時間看看吧,至少大概看看,不要在一個陌生又黑暗的到處碰壁,或張皇四顧,像個沒頭的蒼蠅。 現在耐心聽我老人家絮絮叨叨沒個完的,這點時間絕對值!續________

細說linux掛載——mount,及其他……(2)

OK,現在咱們再具體一點,用我的ubuntu的啟動過程來做個例項,看看linux是怎麼逐步種出這顆大 樹的。 首先還是說一句,你必需知道UUID是啥玩意兒,或者至少要明白hda、sdc這些編號是啥意思。否則肯定是雞同鴨講了。 不想自己 google的話,請移步這裡看3樓。 grub_____________

細說linux掛載——mount,及其他……(4)

每個人都會有一點點隱私,那心靈最深處的脆弱啊,被人觸動了真的好痛好痛喔……引用: 冠希老師:我、我、 我……,就是啊~~哎喲好痛~~~ 痛定思痛,早作打算,咱們不能讓杯具重演,現在就來想想怎麼把這些好痛痛的東西藏起來! 首先請搞清楚一下 幾點: 第 一、這裡討論的是隱藏,而不是加密; 第二、這裡只討論“