def drain(queues): if not queues: print("dwqm: drain: no queues given.") sys.exit(1) Disque.connect(["localhost:7711"]) disque = Disque.get() try: while True: jobs = Job.get(queues, count=1024, nohang=True) if not jobs: return job_ids = [] for job in jobs: job_ids.append(job.job_id) disque.fast_ack(*job_ids) except KeyboardInterrupt: pass
def main(): global shutdown global verbose global active_event args = parse_args() verbose = args.verbose - args.quiet cmd_server_pool = cmdserver.CmdServerPool(args.jobs) signal.signal(signal.SIGTERM, sigterm_handler) _dir = "/tmp/dwq.%s" % str(random.random()) gitjobdir = GitJobDir(_dir, args.jobs) servers = ["localhost:7711"] try: Disque.connect(servers) vprint(1, "dwqw: connected.") except: pass working_set = SyncSet() for n in range(1, args.jobs + 1): threading.Thread( target=worker, args=(n, cmd_server_pool, gitjobdir, args, working_set), daemon=True, ).start() active_event.set() try: while True: if not Disque.connected(): try: vprint(1, "dwqw: connecting...") Disque.connect(servers) vprint(1, "dwqw: connected.") except RedisError: time.sleep(1) continue try: control_jobs = Job.get(["control::worker::%s" % args.name]) for job in control_jobs or []: handle_control_job(args, job) except RedisError: pass except (KeyboardInterrupt, SystemExit): vprint(1, "dwqw: shutting down") shutdown = True cmd_server_pool.destroy() vprint(1, "dwqw: nack'ing jobs") jobs = working_set.empty() d = Disque.get() d.nack_job(*jobs) vprint(1, "dwqw: cleaning up job directories") gitjobdir.cleanup()