Question

J'ai un script en python qui utilise une ressource qui ne peut pas être utilisé par plus d'un certain nombre de scripts simultanés en cours d'exécution.

Classiquement, ce serait résolu par un sémaphores nommé, mais je ne peux pas trouver ceux dans la documentation de multitraitement module ou filetage .

Suis-je manque quelque chose ou sont nommés sémaphores pas mis en œuvre / exposés par Python? et surtout, si la réponse est non, quelle est la meilleure façon d'imiter un?

Merci, Boaz

PS. Pour des raisons qui ne sont pas pertinentes à cette question, je ne peux pas agréger la tâche à un processus en cours d'exécution en continu / démon ou de travail avec les processus donné naissance - qui sont tous deux, il semble, aurait travaillé avec l'API python.

Était-ce utile?

La solution

Je suggère une extension tierce partie comme ces , idéalement la posix_ipc un - voir en particulier la section sémaphore dans la documentation.

Ces modules sont pour la plupart d'exposer le « système V IPC » (y compris les sémaphores) d'une manière unixy, mais au moins l'un d'entre eux (posix_ipc spécifiquement) est prétendu travail avec Cygwin sous Windows (je ne suis pas vérifié que la revendication ). Il y a quelques limitations sur FreeBSD 7.2 et Mac OS X 10.5, prenez donc soin si ces plates-formes sont importantes pour vous.

Autres conseils

Vous pouvez les imiter en utilisant le système de fichiers au lieu d'un chemin du noyau (sémaphores nommés sont mis en œuvre ainsi sur certaines plates-formes de toute façon). Vous devrez mettre en œuvre vous sem_[open|wait|post|unlink], mais il devrait être relativement trivial de le faire. Votre tête de synchronisation peut être importante (selon la fréquence que vous avez à jouer avec le sémaphores dans votre application), de sorte que vous pouvez initialiser un disque virtuel lorsque vous lancez votre processus dans lequel stocker les sémaphores nommés.

Alternativement, si vous n'êtes pas à l'aise rouler vos propres, vous pourriez probablement envelopper boost::interprocess::named_semaphore ( docs ) dans un module d'extension simple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top