X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fimport_known_changes.py;h=0391d974a1e88a1be0098bc1046b5d05eb58daa5;hb=a1e2a8958a1e3f2ed343396a53a8b6bd27262a6e;hp=dcd3a3350e29867d2361459647b0b903e0489349;hpb=c167da7716976d943d9eece5aca235931b043cb4;p=dak.git diff --git a/dak/import_known_changes.py b/dak/import_known_changes.py index dcd3a335..0391d974 100755 --- a/dak/import_known_changes.py +++ b/dak/import_known_changes.py @@ -168,6 +168,10 @@ class ChangesGenerator(threading.Thread): threading.Thread.__init__(self) self.queue = queue self.session = DBConn().session() + self.die = False + + def plsDie(self): + self.die = True def run(self): cnf = Config() @@ -181,6 +185,9 @@ class ChangesGenerator(threading.Thread): if not filenames: # Empty directory (or only subdirectories), next continue + if self.die: + return + for changesfile in filenames: if not changesfile.endswith(".changes"): # Only interested in changes files. @@ -199,10 +206,16 @@ class ImportThread(threading.Thread): threading.Thread.__init__(self) self.queue = queue self.session = DBConn().session() + self.die = False + + def plsDie(self): + self.die = True def run(self): while True: try: + if self.die: + return to_import = self.queue.dequeue() if not to_import: return @@ -268,10 +281,25 @@ def main(): queue = OneAtATime() - ChangesGenerator(queue).start() + threads = [ ChangesGenerator(queue) ] for i in range(num_threads): - ImportThread(queue).start() + threads.append( ImportThread(queue) ) + + try: + for thread in threads: + thread.start() + + for thread in thrads: + thread.join() + + except KeyboardInterrupt: + utils.warn("Caught C-c; terminating.") + for thread in threads: + thread.plsDie() + + for thread in threads: + thread.join() if __name__ == '__main__':