İlk bakışta, Kerevizde çok fazla "Batches" özelliğini beğendim çünkü bir API çağırmadan önce kimlikleri bir grupta gruplandırmam gerekiyor (aksi halde tekmeleyebilirim).Gruplar ile çalışmayan kereviz zinciri
Maalesef, biraz test ederken, toplu iş görevleri, Tuval ilkelerinin geri kalanıyla, bu durumda zincirlerle iyi bir performans göstermiyor. Örneğin:
@a.task(base=Batches, flush_every=10, flush_interval=5)
def get_price(requests):
for request in requests:
a.backend.mark_as_done(request.id, 42, request=request)
print "filter_by_price " + str([r.args[0] for r in requests])
@a.task
def completed():
print("complete")
Yani, bu basit iş akışı ile:
[2015-07-11 16:16:20,348: INFO/MainProcess] Connected to redis://localhost:6379/0
[2015-07-11 16:16:20,376: INFO/MainProcess] mingle: searching for neighbors
[2015-07-11 16:16:21,406: INFO/MainProcess] mingle: all alone
[2015-07-11 16:16:21,449: WARNING/MainProcess] [email protected] ready.
[2015-07-11 16:16:34,093: WARNING/Worker-4] filter_by_price ['ID_1']
5 saniye sonra, filter_by_price() beklendiği gibi tetiklendiğinde:
chain(get_price.s("ID_1"), completed.si()).delay()
bu çıktıyı bkz. Sorun şu ki tamamlandı() asla çağrılmıyor.
Burada neler olabileceğine dair herhangi bir fikir var mı? Gruplar kullanılmıyorsa, bu sorunu çözmek için iyi bir yaklaşım olabilir mi?
PS:CELERYD_PREFETCH_MULTIPLIER=0
'u, belgeler gibi ayarladım.
Sadece kayıt için, RabbitMQ + Pika'yı tek başına, iletileri arabellekleyen çok basit bir çalışan şablonla sonlandırdığım toplu işlere çok ihtiyacım vardı. İlgilenen varsa, kaynak kodum var, şerefe. –