Ho due server: uno con un'applicazione django e uno che esegue sia una coda rabbitmq che un operatore di sedano. Il mio tasks.py sul server che esegue la coda/operaio contiene un'attività come segue:Esecuzione di un'attività di Celery quando non è possibile importare quell'attività
@task(queue="reports")
def test_task():
time.sleep(120)
Il mio obiettivo è quello di eseguire questo compito da una vista Django. Poiché il codice per l'attività si trova su un server diverso rispetto alla vista di django, mi piacerebbe chiamare l'attività, sto cercando di utilizzare il codice seguente per inviare l'attività da django alla macchina worker.
send_task("tasks.test_task", task_id=task_id, args=[], kwargs={}, publisher=publisher, queue=queue)
Ho trovato questo metodo here, ma finora il test non ha funzionato.
Sto testando con tail -F sul file di log di sedici operatori sul server di Celery worker, quindi navigando all'URL della vista che contiene send_task in un browser. Sto cercando il compito di presentarsi come 'ricevuto' nell'output della coda, ma non è così.
Il livello di log del worker di sedano è DEBUG, il file di log mostra che l'attività è registrata con il nome corretto e settings.py dell'app django contiene l'IP corretto e le credenziali per il server rabbitmq. Nel provare approcci diversi, occasionalmente ho visto un messaggio di errore nel file di log di sedici quando ho cambiato la stringa passata a send_task in qualcosa che non era un'attività valida (ad esempio send_task ('asdf')). Ciò ha causato un errore Unregistered nel file di registro. Tuttavia, questo accade solo a volte, e finora nel testare diverse combinazioni di impostazioni e chiamate, non ho trovato un modo per replicare in modo affidabile il comportamento.
Inoltre, questa è la sezione dedicata del settings.py sul progetto Django (con i valori effettivi rimosso):
CELERY_RESULT_BACKEND = 'amqp'
BROKER_HOST = 'the.correct.IP.address'
BROKER_USER = 'the_correct_user'
BROKER_PASSWORD = 'the_correct_pass'
BROKER_VHOST = 'the_correct_vhost'
BROKER_PORT = 5672
Googled intorno e non ho trovato molto su send_task. Qualche idea su cosa potrei fare male?
Sarei interessato a sapere come hai condiviso il codice tra entrambe le macchine. Ecco una domanda che ho scritto relativa a questo: http://stackoverflow.com/questions/28592243/celery-tasks-functions-web-server-vs-remote-server Grazie! – lajarre