6 from threading import Thread
7 from threading import Lock
18 __confs_unmeasured__ = []
21 """Prepare for measuring
22 Outcome is Linux image for generated configuration."""
23 global __confs_unmeasured__
24 if len(__confs_unmeasured__) == 0:
25 dtb = database.database()
26 confs = dtb.get_unmeasured()
28 configurations.generate()
29 confs = dtb.get_unmeasured()
31 raise exceptions.NoApplicableConfiguration()
32 __confs_unmeasured__ = list(confs)
33 con = __confs_unmeasured__.pop()
34 kernel.config(con.cfile)
35 img = kernel.make(con.hash)
36 print("Prepared image: " + img)
39 def measure(kernelimg, con):
41 os.remove(sf(conf.jobfolder_linux_image))
42 except FileNotFoundError:
44 os.symlink(os.path.join(sf(conf.build_folder), kernelimg),
45 sf(conf.jobfolder_linux_image))
47 print("Configuration '" + con.hash + "' measured.")
51 class mainThread(Thread):
54 img, config = prepare()
57 while not __terminate__:
58 img, config = prepare()
61 # Multithread section #
65 class prepareThread(Thread):
66 def __init__(self, name='prepare'):
67 Thread.__init__(self, name=name)
70 while not __terminate__ and len(__conflist__) <= conf.multithread_buffer:
71 __listlock__.release()
74 __conflist__.append(config)
75 if not __measurethread__.isActive():
76 __measurethread__.start()
77 __listlock__.release()
79 class measureThread(Thread):
80 def __init__(self, name='measure'):
81 Thread.__init__(self, name=name)
84 while not __terminate__ and len(__conflist__) > 0:
85 config = __conflist__[0]
87 __listlock__.release()
88 if not __preparethread__.isActive():
89 __preparethread__.start()
92 __listlock__.release()
94 __preparethread__ = prepareThread()
95 __measurethread__ = measureThread()
97 # Start and sigterm handler #
98 def sigterm_handler(_signo, _stack_frame):
108 except KeyboardInterrupt:
111 #################################################################################
113 if __name__ == '__main__':
114 signal.signal(signal.SIGTERM, sigterm_handler)