告诉waf等待任务完成,然后盯着下一个任务

wafwafwaf

我有两个任务,waf它们需要以正确的顺序执行,第二个任务必须等到第一个任务完成后才能执行。

为了说明它的工作方式,我在任务内部等待,在第一个任务(t_1)中等待4秒,在第二个任务(t_2)中等待1秒。第二项任务首先完成。可以看到,因为我在等待后创建的文件夹带有时间戳t_2 < t_1

在一个问题中:我如何告诉waf,那t_2是在t_1成功完成之后执行的


  1. MWE:wscript

    from waflib import Context, Options
    from waflib import Task, TaskGen
    from waflib.Tools.compiler_c import c_compiler
    
    def options(opt):
        opt.load('compiler_c')
    
    def configure(cnf):
        cnf.load('compiler_c')
    
    def build(bld):
        bld.program(features=['t_1', 't_2'], source='main.c', target='abc')
    
    class t_1(Task.Task):
        always_run = True
        run_str = 'echo start t_1 && python -c "import time; time.sleep(4)" && echo end t_1 && mkdir t_1'
        color = 'RED'
    
    
    @TaskGen.feature('t_1')
    @TaskGen.after('apply_link')
    @TaskGen.before('t_2')
    def add_t_1_task(self):
        self.create_task('t_1')
    
    
    class t_2(Task.Task):
        always_run = True
        run_str = 'echo start t_2 && python -c "import time; time.sleep(1)" && echo end t_2 && mkdir t_2'
        color = 'RED'
    
    
    @TaskGen.feature('t_2')
    @TaskGen.after('apply_link', 't_1')
    def add_t_2_task(self):
        self.create_task('t_2')
    
wafwafwaf

您必须在该任务的属性中指定必须在其之前运行的任务(在该示例中t_1),该after属性应“等待”另一个任务完成(在该示例中,该示例(t_2)。其指定方式如下:after = ['t_1']

可以waf书中的构建顺序约束部分中找到此文档

当前waf书(waf 2.0)中解释通用任务生成器的文档§9.3,尤其是§9.3.4解释了任务生成器的执行顺序。


完整的示例MWE如下所示:

from waflib import Context, Options
from waflib import Task, TaskGen
from waflib.Tools.compiler_c import c_compiler

def options(opt):
    opt.load('compiler_c')

def configure(cnf):
    cnf.load('compiler_c')

def build(bld):
    bld.program(features=['t_1', 't_2'], source='main.c', target='abc')

class t_1(Task.Task):
    always_run = True
    run_str = 'date && echo 1 && echo start t_1 && python -c "import time; time.sleep(4)" && echo end t_1 && mkdir t_1 && date && echo 1'
    color = 'RED'


@TaskGen.feature('t_1')
@TaskGen.after('apply_link')
@TaskGen.before('t_2')
def add_t_1_task(self):
    self.create_task('t_1')


class t_2(Task.Task):
    always_run = True
    after = ['t_1'] # <---------------------------- **The problems solution**
    run_str = 'date && echo 1 && echo start t_2 && python -c "import time; time.sleep(1)" && echo end t_2 && mkdir t_2 && date && echo 2'
    color = 'RED'


@TaskGen.feature('t_2')
@TaskGen.after('apply_link', 't_1')
def add_t_2_task(self):
    self.create_task('t_2')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

等待内联线程完成,然后再转到下一个方法

Gulp任务不等待上一个任务的完成

从一系列Rake任务中退出,然后继续下一个

快速移动到下一个任务,而无需等待其他主机完成该任务

Camunda跳至下一个用户任务

角度5:如何等待服务完成,然后继续执行下一个任务?

等待Scala Future完成并继续下一个

警报对话框密码验证,然后再执行下一个任务

在为下一个成员运行循环之前完成任务

等待下载方法完成,然后再运行下一个.then-node.js

气流:在下一个任务中获取上一个任务ID

是否等待当前迭代完成,然后再进行下一个迭代?

React Redux-等待异步api调用完成,然后分派下一个操作

等待循环完成,然后再执行下一个功能

如何仅等待第一个任务完成

C ++在继续下一个任务之前先完成当前任务

Alfresco:如何在下一个任务中查看完成任务的数据?

jbpm 5.4任务已完成,但未创建下一个任务

如何等待截击响应完成然后执行下一个方法

JavaFX等待动画方法完成,然后再转到下一个方法

等待循环中的每个动画完成,然后再运行下一个动画

等待功能中的所有淡入完成,然后再启动下一个功能

等待请求完成,然后再执行下一个操作

在“ for”循环中使用Jquery promise()等待效果完成,然后再开始下一个效果

Retrofit2:在 recyclerview 中执行下一个任务之前等待响应

如何使用等待 jquery ajax 完成的 javascript 承诺,然后再进行下一个承诺?

设置变量以用于下一个任务

完成第一个任务后,如何使异步任务继续执行下一个任务?

从输出中提取一个值,然后在下一个任务中使用它