Названные семафоры в Python?

У меня есть сценарий в Python, который использует ресурс, который не может использоваться больше, чем определенное количество параллельного выполнения сценариев.

Классически, это было бы решено именованные семафоры, но я не могу найти семафоры в документации многопроцессорного модуля или поточной обработки.

Я отсутствую, что-то или разве названный семафорами не реализовано / выставленный Python? и что еще более важно, если ответ не, что лучший способ состоит в том, чтобы эмулировать тот?

Спасибо, Боаз

PS. По причинам, которые не так относятся к этому вопросу, я не могу агрегировать задачу к непрерывно рабочему процессу/демону или работать с порожденными процессами - оба из которых, кажется, работали бы с Python API.

12
задан Boaz 10 May 2010 в 12:33
поделиться

2 ответа

Я предлагаю стороннее расширение вроде этих, в идеале posix_ipc - смотрите, в частности, раздел sempahore в документации.

Эти модули в основном предназначены для раскрытия "системного V IPC" (включая семафоры) unixy способом, но по крайней мере один из них (posix_ipc в частности), как утверждается, работает с Cygwin на Windows (я не проверял это утверждение). Есть некоторые документированные ограничения на FreeBSD 7.2 и Mac OSX 10.5, так что будьте осторожны, если эти платформы важны для вас.

4
ответ дан 2 December 2019 в 23:42
поделиться

Вы можете эмулировать их, используя файловую систему вместо пути ядра (именованные семафоры так реализованы на некоторых платформах). Вам придется реализовать sem_[open|wait|post|unlink] самостоятельно, но это должно быть относительно тривиально. Накладные расходы на синхронизацию могут быть значительными (в зависимости от того, как часто вам придется возиться с семафором в вашем приложении), поэтому вам, возможно, захочется инициализировать ramdisk при запуске вашего процесса, в котором будут храниться именованные семафоры.

В качестве альтернативы, если вам неудобно создавать свой собственный, вы можете обернуть boost::interprocess::named_semaphore (docs here) в простой модуль расширения.

0
ответ дан 2 December 2019 в 23:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: