У меня есть следующий код, который выполняется в задаче celery: self.resdict ['jobs'] содержит список подзадач, и я проверяю их состояние в цикле while.
while any([x.status for x in self.resdict['jobs'].values() if x.status is not 'SUCCESS']):
print([x.status for x in self.resdict['jobs'].values() if x.status is not 'SUCCESS'])
print(any([x.status for x in self.resdict['jobs'].values() if x.status is not 'SUCCESS']))
time.sleep(.5)
else:
for a in self.resdict['accounts'][0]['result']:
account = a['number'] if isinstance(a['number'], str) else False
self.resdict[account] = self.resdict['jobs'][account].result[0]['result'][0]['Device Information']['subattributes']
Когда я запускаю этот код с CELERY_ALWAYS_EAGER = True и CELERY_EAGER_PROPAGATES_EXCEPTIONS = True, он дает мне ожидаемые результаты, если список содержит все «SUCCESS»
Итак, что я получаю, когда я работаю с всегда готовыми:
print([x.status for x in self.resdict['jobs'].values() if x.status is not 'SUCCESS']) = ['SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS']
print(any([x.status for x in self.resdict['jobs'].values() if x.status is not 'SUCCESS'])) = False
Когда я бегу не всегда с нетерпением, внутри отладки сельдерея я вижу:
print([x.status for x in self.resdict['jobs'].values() if x.status is not 'SUCCESS']) = ['SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS', 'SUCCESS']
print(any([x.status for x in self.resdict['jobs'].values() if x.status is not 'SUCCESS'])) = True
Что не правильно, поскольку в списке содержится только «УСПЕХ».
Любая идеяпочему сельдерей говорит True, когда это должно быть False?