Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top