Accesso allo stato del thread dal processo principale [chiuso]

1

Attualmente sto scrivendo un programma Python con un processo principale che distribuisce il lavoro su un numero di thread worker tramite code worker separate per thread.

Ora ho il problema che il processo principale deve sapere che tipo di lavoro sta facendo un thread di lavoro in un determinato momento, poiché l'assegnazione del lavoro dipende da questo (nessun altro thread di lavoro può essere assegnato a un lavoro di tipo X se un lavoro di tipo X è attualmente in fase di elaborazione da qualche altro thread di lavoro). Per questo motivo, i thread dei singoli worker devono mantenere una sorta di stato a cui è possibile accedere dal processo principale in qualsiasi momento.

Che cos'è un modo thread-safe per farlo in Python?

    
posta Simon Fromme 17.02.2017 - 16:03
fonte

1 risposta

2

no other worker thread may be allocated a job of type X if a job of type X is currently being processed by some other worker thread

Quindi la risorsa che deve essere protetta qui è di tipo X.

Prima che qualsiasi thread di lavoro funzioni su qualsiasi cosa di tipo X, è necessario testare se si sta lavorando su qualcosa di X. Se non lo è, è necessario impostare il tipo X su cui si sta lavorando e farlo atomicamente. Cioè, il thread di lavoro non deve consentire a un test di qualche altro thread di intrufolarsi tra il proprio test e set. Questo è il test e impostazione del problema.

Invece di sondaggio i thread di lavoro considerano di lasciargli dire il loro stato quando cambia ( basato sull'evento ). Seguire il schema di osservazione è un buon modo per creare il tuo sistema di eventi . Il polling non sempre scala bene.

Un altro modo per risolvere questo problema è avere una delle tue code solo per cose di tipo X. Quando un lavoratore termina con una cosa X, dice al tipo X coda che è fatta. Ora la coda X può smettere di fingere di essere vuota. Fintanto che nient'altro offre una X per l'elaborazione, avremo impedito l'elaborazione simultanea di cose di tipo X.

    
risposta data 18.02.2017 - 15:29
fonte

Leggi altre domande sui tag