2011-09-19 11 views
8

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

1

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.

+1

Ha detto "qualsiasi euristica", non sta cercando una soluzione esatta e generale. Dubito anche che stesse parlando di guardare il bytecode. – agf

2

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.

Problemi correlati