You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
910 B
Python
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
|
|
|