Я использую сельдерей для параллелизации некоторых длительных рабочих заданий. На самом деле мой chunking algo не может гарантировать такую же работу для каждой подзадачи . Поэтому я заметил это неожиданное поведение, используя неуравновешенные задачи внутри группы.Выбор сельдерея - подзадачи внутри группы
пример задачи:
@app.task(name='step')
def step(s):
print 'step received:', s
time.sleep(s)
return s
В этом сценарии:
%time group(step.s(10), step.s(1), step.s(1), step.s(3))
CPU times: user 32.2 ms, sys: 33.6 ms, total: 65.8 ms
Wall time: <b>13.6 s</b>
Out[5]: [10, 1, 1, 3]
Я думаю, что ни одна комбинация 1,1,3,10 не может превышать 10SEC (плюс небольшое время для выполнения задач) ,
Я заметил, что этот призыв:
- шаг (10) -> Рабочий 1
- шаг (1) -> рабочий 2
- шаг (1) -> Рабочий 3
после этого, работники 2 и 3 заняты в течение короткого времени (всего 1 сек.), Поэтому они могут работать над последней задачей, но «шаг (3)» будет обрабатываться ТОЛЬКО после завершения «шага (10)» ,
Это звучит странно для меня. Любое предложение?
Спасибо GLA
Похоже, что это связано с предпрок: http://docs.celeryproject.org/en/latest/userguide/optimizing.html#prefork-pool-prefetch-settings. Правильно ли это? – Glauco
... ... ... использование ... -Ofair' ... отличие ...? – scytale
Да, да. Теперь он работает так, как ожидалось. – Glauco