Nombrados semáforos en Python?

Tengo un script en python que usa un recurso que no puede ser usado por más de una cierta cantidad de scripts concurrentes en ejecución.

Clásicamente, esto se resolvería con un semáforo nombrado, pero no puedo encontrarlos en la documentación del módulo o subprocesos de multiprocesamiento .

¿Me estoy perdiendo algo o me nombran semáforos no implementados / expuestos por Python? y lo que es más importante, si la respuesta es no, ¿cuál es la mejor manera de emular una?

Gracias boaz

PD. Por razones que no son tan relevantes para esta pregunta, no puedo agregar la tarea a un proceso / demonio en ejecución continua o trabajar con procesos generados; ambos, al parecer, habrían funcionado con la API de python.

    Sugiero una extensión de terceros como estos , idealmente la posix_ipc – vea en particular la sección sempahore en los documentos.

    La mayoría de estos módulos tratan de exponer el “sistema V IPC” (incluidos los semáforos) de forma unixy, pero al menos uno de ellos (específicamente posix_ipc ) se afirma que funciona con Cygwin en Windows (no he verificado esa afirmación). Existen algunas limitaciones documentadas en FreeBSD 7.2 y Mac OSX 10.5, así que tenga cuidado si esas plataformas son importantes para usted.

    Puede emularlos usando el sistema de archivos en lugar de una ruta del kernel (los semáforos nombrados se implementan de esta manera en algunas plataformas). Tendrá que implementar sem_[open|wait|post|unlink] usted mismo, pero debería ser relativamente trivial hacerlo. Su sobrecarga de sincronización puede ser significativa (dependiendo de la frecuencia con la que tenga que jugar con el semáforo en su aplicación), por lo que es posible que desee inicializar un disco de memoria RAM cuando inicie el proceso para almacenar semáforos con nombre.

    Alternativamente, si no se siente cómodo con su propia boost::interprocess::named_semaphore , probablemente podría boost::interprocess::named_semaphore ( docs aquí ) en un módulo de extensión simple.