小编Ale*_*dan的帖子

芹菜:从任务中撤销整个链的干净方式

我的问题可能很基本,但我仍然无法在官方文档中找到解决方案.我在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)

但这种"解决方法"有一些缺陷:

  • 为每个任务添加不必要的逻辑(基于前任的结果),从而影响重用
  • 仍然执行后续任务,以及所有产生的开销

我没有玩太多将链的引用传递给任务,因为害怕搞乱事情.我也承认我还没有尝试过抛出异常的方法,因为我认为不进行链接的选择可能是一个功能性(因此非特殊)的情况......

谢谢你的帮助!

django task celery chain

9
推荐指数
2
解决办法
2886
查看次数

带有heredoc的猫在zsh shell中不起作用

当我尝试

cat > myfile << EOF
TEST TEXT
EOF
Run Code Online (Sandbox Code Playgroud)

我只是得到一个空文件。使用echo命令相同。这是怎么回事?我只能考虑.zshenv配置文件中的一些冲突,但我不知道它可能是什么......

我正在使用zsh 4.3.6 (x86_64-suse-linux-gnu).

shell zsh heredoc cat

7
推荐指数
2
解决办法
4958
查看次数

不应使用c ++ Digraph(MISRA C++ 2-5-1)

根据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规则是否有功能性原因 …

c++ misra digraphs

6
推荐指数
1
解决办法
607
查看次数

异常后重试本地静态变量初始化

在本地定义的静态变量的上下文中,如果在变量初始化时抛出异常并且我们重试实例化变量,那么预期的行为是什么?

例如:

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)

我希望,由于异常导致堆栈被解除,因此第二次执行循环时,变量会再次尝试初始化.然而,局部静态变量只被初始化一次,所以它闻起来有些未定义的行为.这段代码片段的预期行为是什么?在这种情况下,标准是否保证定义的行为?

c++ language-lawyer

4
推荐指数
1
解决办法
83
查看次数

const 引用会延长临时对象返回的临时对象的寿命吗?

我知道 const 引用会延长本地临时文件的寿命。现在我问自己是否可以在临时对象链上扩展此属性,也就是说,我是否可以安全地定义:

std::string const& foo = aBar.getTemporaryObject1().getTemporaryObject2();
Run Code Online (Sandbox Code Playgroud)

我的感觉是,由于第一个方法aBar.getTemporaryObject1()已经返回了一个临时对象,因此不适用于aBar.getTemporaryObject2().

c++ lifetime rvalue temporary-objects reference-binding

0
推荐指数
1
解决办法
620
查看次数