Dík za článek, zrovna s celery zaobírám. Narazil jsem ale na jeden bug, když se použije jako backend rabbitmq a to, že po asi minutě worker přestane odpovídat.
Podle FAQ je to známý bug, prý "někteří AMQP klienti mají problém", ale už není zmíněno, kteří ten problém nemají: http://docs.celeryproject.org/en/latest/faq.html#why-is-task-delay-apply-the-worker-just-hanging
Zkoušel jsem měnit verze amqp, vidím že si to dotáhlo i závislost na kombu, ale nevím, která část ten problém způsobuje. Různé verze akorát generují jiné errory v rabbitmq logu (typicky "client unexpectedly closed TCP connection" nebo ztráta heartbeatu).
Neví někdo, za co teda kombu+amqp vyměnit a jak to nakonfigurovat na celery?
Dík, snad to pomůže. Zkoušel jsem měnit i broker_heartbeat a broker_heartbeat_checkrate nahoru i dolů, ale pořád se to rozpadne.
Myslím, že ty bugy jsou tam dva: jednou request přijde workeru, ale nelze dostat odpověď zpět (zasekne se result.get()) a v druhém případě ani na worker nedorazí (task.delay() s zasekne a klient se snaží zuřivě připojit v cyklu donekonečna). Vypadá, že to nezávisí od nastavení heartbeatů.
tak to nevím.
ad heartbeaty: jak celery, tak rabbitmq mají vlastní mechanismy na heartbeaty. takže informace, že log ukazuje chybějící heartbeat moc nepomůže.
ad "zasekne se result.get()": celery komunikuje pomocí dvou mechanismů. jeden je message broker a druhý je result backend. výsledky se vrací skrz ten result backend. zkuste si nejdřív rozhodit práci s message brokerem, zkontrolovat, jestli se úlohy spouští a teprve potom řešit vracení výsledků.
a ještě mě napadlo: s celery se worker a klient, co se k workeru připojuje, spouští nezávisle. jdou nastavit různě.