Threading и pyfsevents - PullRequest
       6

Threading и pyfsevents

0 голосов
/ 21 февраля 2010

Модуль pyfsevents позволяет программам на Python использовать платформу Mac OS X FSEvents. Можно зарегистрировать путь и функцию обратного вызова, а затем вызвать функцию listen (), которая блокируется, пока в зарегистрированном пути не произойдет событие файловой системы.

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

Я хотел бы использовать этот модуль в многопоточной программе, в которой один поток блокирует и ожидает события файловой системы, а затем уведомляет другой поток для обработки события. К сожалению, похоже, что listen () блокирует всю программу, а не только вызывающий поток. Кто-нибудь может это подтвердить? Есть ли способ заблокировать только вызывающий поток? Если нет, существуют ли способы достижения аналогичной функциональности, то есть позволить потоку обнаруживать изменения в каталоге, предпочтительно без опроса?

Ответы [ 2 ]

1 голос
/ 21 февраля 2010

Да, как говорят документы (в разделе "Ограничения"),

Небезопасный поток: CFRunLoop's и Python темы не совсем хорошо взаимодействуют когда сложено:)

Я рекомендую использовать многопроцессорность , чтобы изолировать использование pyfsevents в выделенном процессе, который может отправлять оповещения "head-up" в основной процесс любым удобным вам способом (например, через multiprocessing.Queue).

Если вам нужно запустить на Python 2.5, есть backport модуля multiprocessing - последний находится в стандартной библиотеке только начиная с Python 2.6, но backport работает нормально на 2.4 и 2.5.

0 голосов
/ 25 мая 2012

Попробуйте MacFSEvents. Это потокобезопасно. https://github.com/malthe/macfsevents

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...