Bene, la prima cosa che avevo in mente era come assicurarsi che se pydispatcher o pubsub fosse thread-safe o no. pubub potrebbe essere un po 'complicato o complicato da capire ma il pydispatcher sembra semplice da realizzare. Poi ho iniziato a chiedermi come capire se un modulo python fosse sicuro o no. Qualsiasi euristica?Come valutare un modulo python è thread-safe o no?
risposta
Da un punto di vista teorico: non esiste un algoritmo che lo faccia per un programma arbitrario. È come lo halting problem.
È possibile ispezionare i moduli utilizzati e verificare se sono concessi come thread-safe. Ma non esiste un modo generale per controllare il codice byte di un modulo per la sicurezza del thread.
Per determinare se una libreria o applicazione è thread-safe, senza input autore, vorrei cercare meccanismi per i thread di sincronizzazione: http://effbot.org/zone/thread-synchronization.htm o che contiene i metodi di threading: http://docs.python.org/library/threading.html
Tuttavia, niente di tutto questo vi dirà come utilizzare l'API in modo thread-safe. Praticamente qualsiasi cosa può essere inserita all'interno di un oggetto thread e comunicata all'utilizzo degli oggetti di sincronizzazione del thread.
Per qualcosa come pubsub si potrebbe creare una classe che avvolge l'API e comunica esclusivamente tramite le code. Ad esempio, se pubub ha vissuto nello stesso thread di wx, è possibile creare un'API per inserire messaggi nella coda utilizzando un'API di threading per l'invio di messaggi. Quindi un ciclo o timer di Pubub potrebbe monitorare la coda. Avrebbe quindi inviato messaggi. Uno dei problemi con il wrapping di qualcosa come pubub è che da qualche parte richiederà il polling. Potrebbe essere reso trasparente se i sondaggi sono stati eseguiti da timer. Ogni thread dovrebbe allocare un timer per ricevere messaggi se pubub non risiede in quel thread. Potrebbero esserci approcci più eleganti a questo, ma non ne sono a conoscenza.
- 1. Python: è os.read()/os.write() su un file os.pipe() threadsafe?
- 2. Un DAO per thread o DAO threadsafe?
- 3. Java: ServerSocket.accept è threadsafe?
- 4. È NSUserDefaults threadsafe
- 5. È intelligente o no?
- 6. Python come sapere se un record inserito correttamente o no
- 7. Clojure: come valutare un modulo quotato nell'ambito locale?
- 8. Invia un modulo come JSON (no AJAX)
- 9. Come valutare un System.Linq.Expressions.Expression
- 10. è un valore l temporaneo o no?
- 11. BigInteger è immutabile o no?
- 12. Come valutare un'espressione matematica personalizzata in Python
- 13. È un oggetto o un'interfaccia? Devo liberarlo o no?
- 14. Come sapere se un oggetto è autoreleased o no?
- 15. Come sapere se un MediaRecorder è in esecuzione o no?
- 16. Come verificare se un array multidimensionale è vuoto o no?
- 17. Come verificare una stringa se è un ASCII o no?
- 18. Come sapere se un modello è nuovo o no?
- 19. Come posso rendere AllocateHwnd threadsafe?
- 20. Come valutare il codice javascript in Python
- 21. ImportErrore: No Modulo denominato xlwt
- 22. java.util.concurrent.Future threadsafe?
- 23. Python: no csv.close()?
- 24. Verifica se un modulo Angular2 è valido o no all'interno del componente
- 25. imp.load_source() gettando "No modulo denominato" Errore Python 2.7
- 26. Come estendere un modulo Python? (python-twitter)
- 27. Errore fatale Python: PyImport_GetModuleDict: no dizionario del modulo
- 28. Come posso valutare un elenco di stringhe come un elenco di tuple in Python?
- 29. Verificare se IIS è installato o no?
- 30. annotazione chiamato ThreadSafe
Ha detto "qualsiasi euristica", non sta cercando una soluzione esatta e generale. Dubito anche che stesse parlando di guardare il bytecode. – agf