waf/playground/task_semaphore/wscript

45 lines
910 B
Python

#! /usr/bin/env python
"""
Task semaphore demo. Compare the runtimes:
waf configure build --fast # 0m08
waf configure build # 1m15
"""
import random, time
from waflib import Task, TaskGen, Utils
def options(opt):
opt.add_option('--fast', action='store_true', default=False, help='Disable the semaphore to compare the runtime', dest='fast')
def configure(conf):
pass
def build(bld):
# max 20 jobs globally
bld.jobs = 20
bld(features='make_100')
class Foo(Task.Task):
always_run = True
if not bld.options.fast:
semaphore = Task.TaskSemaphore(2) # 2 jobs maximum
def uid(self):
# unique id for each object
return Utils.h_list(self.num)
def run(self):
time.sleep(random.randint(1000, 2000) / 1000.)
print("Task %r" % self.num)
@TaskGen.feature('make_100')
def make_100_bound_tasks(self):
for x in range(100):
tsk = self.create_task('Foo')
tsk.num = x