Python: controlla il sottoprocesso dal thread chiamante

6

Sto lavorando su un'interfaccia database a un MongoDB utilizzando Python Eve come API.

Il database memorizza diversi documenti contenenti parametri e valori necessari per alcuni calcoli. Ho scritto un modulo Python contenente tutte le routine di calcolo che devono avere accesso ai dati desiderati.

Poiché i calcoli richiedono un po 'di tempo per completare, preferisco il multiprocessing invece del multithreading per utilizzare diversi core per le simulazioni di co-corrente (facendo calcoli in parallelo, un calcolo per core, ma con parametri di input diversi, senza dividere un calcolo a diversi core).

Per avviare quei calcoli paralleli come processi propri (sotto) ho pensato di usare qualcosa come un thread genitore che è osservato da un altro thread chiamato 'osservatore di thread'. Poiché ciascuno di questi processi di calcolo necessita dell'accesso al database, ho pensato di utilizzare la eve-API in combinazione con requests modulo.

Tutto sommato questi pensieri portano alla configurazione come la seguente:

Sulla base di questo concetto non sono sicuro su come controllare il sottoprocesso dal thread principale. Come posso assicurarmi che Process 1 sia terminato se Thread 1 termina?

Nota: la soluzione desiderata deve funzionare sia su macchine basate su UNIX che su Windows. Quindi usare il% co_de restituito del processo avviato per ucciderlo usando pid non funzionerebbe dato che questo non sarebbe fattibile su una macchina Windows.

    
posta albert 17.12.2015 - 20:07
fonte

1 risposta

2

Inizia con Python 2 e Python 3 pacchetto multiprocessing con classi come Process with Queue e Pipe per scambiare messaggi tra di loro su tutte le piattaforme su cui Python gira. Sembra che tu sia interessato alla classe Pool di multiprocessing per controllare i processi di lavoro. È uno stile di controllo diverso rispetto al solito fork / exec, wait e signal.

    
risposta data 01.01.2016 - 17:45
fonte