2012-01-27 21 views
5

Questa è una domanda di follow-up alla mia precedente interrogazione: Cancel an already executing task with Celery?django sedano terminare sottoprocessi di attività

celery.task.control.revoke({task_id}, terminate=True) 

effettivamente uccidere il mio lavoratore che esegue l'attività. Ora ho il problema che il mio compito sta eseguendo sottoprocessi che non muoiono quando l'attività viene revocata.

Questo post di dmarkey http://dmarkey.com/wordpress/2011/09/07/killing-child-processes-of-celery-tasks-on-a-timeout/ è il più vicino che ho visto a quello che voglio fare, tranne che io non voglio uccidere il timeout, ma piuttosto quando Revoco() con il task_id.

Considerando che tutto ciò che ho è (stringa) task_id, c'è comunque un modo per eliminare tali sottoprocessi? Grazie per il vostro aiuto - non ho abbastanza esperienza con questo come mi piacerebbe, la navigazione dei documenti è una sfida!

risposta

3

Provare a impostare una richiamata per on_revoked che uccide i processi figlio dell'attività.

+0

C'è un buon modo per ottenere il pid (s) per l'esecuzione di sottoprocessi? – dcoffey3296

+0

Forse, ma non ne sono a conoscenza. Forse potresti tenerne traccia quando vengono creati? Modifica: in realtà, il codice nel tuo link (di dmarkey) sembra funzionare o no? – aganders3

Problemi correlati