Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python celery any()语句在任务中给出错误的结果_Python_Celery - Fatal编程技术网

Python celery any()语句在任务中给出错误的结果

Python celery any()语句在任务中给出错误的结果,python,celery,Python,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 '

我在芹菜任务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\u ALWAYS\u Eanger=True和CELERY\u Eanger\u PROPAGATES\u 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
这是不正确的,因为列表中只包含“SUCCESS”


你知道为什么芹菜说的是真的而它应该是假的吗?

你不应该将字符串与
is
进行比较。它有时可能会起作用,因为一些字符串将被Python解释器“插入”并缓存,但这种缓存并不能保证在所有情况下都会发生。相反,您应该使用
==
而不是
is
,通过值而不是身份进行比较=的code>不是

这应该可以解决您当前的问题,但我进一步建议您似乎没有以非常有用的方式使用
any
any
函数在iterable参数中的第一个值为truthy后返回
True
。如果您只是想测试一个空列表,请跳过
any
,并将列表本身用作布尔值。空列表是错误的,而包含任何元素(不管这些元素的值)的列表是真实的

如果您不首先建立一个列表,那么使用
any
将更有意义。这是因为
any
短路,在第一个真实结果之后停止,而不检查其余的iterable。这使得它与生成器非常匹配,生成器只根据需要延迟计算其值。只需删除方括号,即可将列表替换为生成器表达式。但在这种情况下,我建议更改代码,使生成器生成
bool
s,而不是值或无:
any(x.status!=“Success”代表self.resdict['jobs'].values())