我的问题可能很基本,但我仍然无法在官方文档中找到解决方案.我在Django应用程序中定义了一个Celery链,执行一组依赖于eanch其他的任务:
chain( tasks.apply_fetching_decision.s(x, y),
tasks.retrieve_public_info.s(z, x, y),
tasks.public_adapter.s())()
Run Code Online (Sandbox Code Playgroud)
显然,第二个和第三个任务需要父项的输出,这就是我使用链的原因.
现在的问题是:如果第一个任务中的测试条件失败,我需要以编程方式撤销第二个和第三个任务.如何以干净的方式做到这一点?我知道我可以从我定义链的方法中撤销链的任务(参见这个问题和本文),但在第一个任务中,我没有后续任务的可见性,也没有链本身的可见性.
我目前的解决方案是根据前一个任务的结果跳过后续任务中的计算:
@shared_task
def retrieve_public_info(result, x, y):
if not result:
return []
...
@shared_task
def public_adapter(result, z, x, y):
for r in result:
...
Run Code Online (Sandbox Code Playgroud)
但这种"解决方法"有一些缺陷:
我没有玩太多将链的引用传递给任务,因为害怕搞乱事情.我也承认我还没有尝试过抛出异常的方法,因为我认为不进行链接的选择可能是一个功能性(因此非特殊)的情况......
谢谢你的帮助!
当我尝试
cat > myfile << EOF
TEST TEXT
EOF
Run Code Online (Sandbox Code Playgroud)
我只是得到一个空文件。使用echo命令相同。这是怎么回事?我只能考虑.zshenv配置文件中的一些冲突,但我不知道它可能是什么......
我正在使用zsh 4.3.6 (x86_64-suse-linux-gnu).
根据MISRA C++ 2-5-1我们通常应该避免弄乱有向图.虽然,我不明白为什么我们也应该避免使用可读的话and,or,not等确定共同的运营商&&,||...
这个问题甚至被强调为Sonar/MISRA的"主要"问题:
[Major] Open Replace this digraph 'and' by its equivalent '&&'
[Major] Open Replace this digraph 'and' by its equivalent '&&'
[Major] Open Replace this digraph 'or' by its equivalent '||'
[Major] Open Replace this digraph 'or' by its equivalent '||'
[Major] Open Replace this digraph 'or' by its equivalent '||'
Run Code Online (Sandbox Code Playgroud)
是规则还包括人类可读的双图(即来自神秘的完全不同??=,??/因特殊原因),或者规则只是太普通?我没有发现使用它们的任何特殊风险或副作用,我错了吗?
这个MISRA规则是否有功能性原因 …
在本地定义的静态变量的上下文中,如果在变量初始化时抛出异常并且我们重试实例化变量,那么预期的行为是什么?
例如:
void someFunc()
{
bool initialized=false;
do
{
try
{
static SomeType throwingConstructor; //it throws the first time!
initialized=true;
}
catch(...)
{
//some other code
}
}
while(!initialized);
}
Run Code Online (Sandbox Code Playgroud)
我希望,由于异常导致堆栈被解除,因此第二次执行循环时,变量会再次尝试初始化.然而,局部静态变量只被初始化一次,所以它闻起来有些未定义的行为.这段代码片段的预期行为是什么?在这种情况下,标准是否保证定义的行为?
我知道 const 引用会延长本地临时文件的寿命。现在我问自己是否可以在临时对象链上扩展此属性,也就是说,我是否可以安全地定义:
std::string const& foo = aBar.getTemporaryObject1().getTemporaryObject2();
Run Code Online (Sandbox Code Playgroud)
我的感觉是,由于第一个方法aBar.getTemporaryObject1()已经返回了一个临时对象,因此不适用于aBar.getTemporaryObject2().