Domanda

Ho uno script in python che utilizza una risorsa che non può essere utilizzato da più di una certa quantità di script simultanei in esecuzione.

Classicamente, questo sarebbe stato risolto con un nome semafori, ma non riesco a trovare quelli nella documentazione della multiprocessing modulo o threading .

Mi manca qualcosa o prendono il nome da semafori non implementato / esposti da Python? e, soprattutto, se la risposta è no, qual è il modo migliore per uno emulare?

Grazie, Boaz

PS. Per ragioni che non sono così relative a questa domanda, non possono aggregare il compito di un processo in esecuzione continua / daemon o lavorare con processi generati - entrambi i quali, sembra, avrebbe lavorato con l'API pitone.

È stato utile?

Soluzione

Suggerisco una terza estensione parti come questi , idealmente il posix_ipc uno - vedi, in particolare, sempahore sezione nella documentazione.

Questi moduli sono per lo più di esporre il "sistema V IPC" (compresa semafori) in modo Unixy, ma almeno uno di essi (posix_ipc specificamente) è affermato di lavorare con Cygwin su Windows (non ho verificato che la domanda ). Ci sono alcune documentate limitazioni su FreeBSD 7.2 e Mac OSX 10.5, quindi attenzione se tali piattaforme sono importanti per voi.

Altri suggerimenti

È possibile emularli utilizzando il filesystem invece di un percorso kernel (semafori di nome sono implementati in questo modo su alcune piattaforme comunque). Dovrai implementare sem_[open|wait|post|unlink] te stesso, ma dovrebbe essere relativamente banale per farlo. Il sovraccarico di sincronizzazione potrebbe essere significativo (a seconda di quanto spesso si deve violino con semaforo nel vostro app), così si potrebbe desiderare di inizializzare un ramdisk quando si avvia il processo in cui memorizzare i semafori con nome.

In alternativa, se non stai bene posizionare il proprio, probabilmente si potrebbe avvolgere boost::interprocess::named_semaphore ( docs qui ) in un semplice modulo di estensione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top