2010-02-21 17 views
0

模塊pyfsevents允許Python程序使用Mac OS X FSEvents框架。可以註冊路徑和回調函數,然後調用listen()函數,該函數將阻塞,直到文件系統事件發生在註冊路徑中。線程和pyfsevents

pyfsevents.registerpath("/example", callback) 
    pyfsevents.listen() 

我想在多線程程序中使用這個模塊,有一個線程阻塞和等待文件系統事件,然後通知另一個線程來處理該事件。不幸的是,它看起來像listen()阻塞整個程序,而不僅僅是調用線程。任何人都可以確認嗎?有沒有辦法阻止只有調用線程?如果沒有,是否有辦法實現類似的功能,即讓一個線程檢測目錄中的變化,最好不用輪詢?

回答

1

是的,作爲the docs說(在 「限制」),

線程安全的:CFRunLoop的和Python 線放在一起時:)

不太相處得非常好 我建議使用multiprocessingpyfsevents用於專用過程,可以以任何方式(例如,通過multiprocessing.Queue)向主過程發送「擡頭」警報。

如果您需要在Python 2.5上運行,multiprocessing模塊中有backport模塊 - 後者在Python 2.6以後的標準庫中,但在2.4和2.5版本上運行正常。