mirror of https://gitlab.com/ita1024/waf
				
				
				
			
			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
 | 
						|
 |