Это мой класс работы:
class QueryJob(workerpool.Job):
"Job for downloading a given URL."
def __init__(self, query):
self.query = query # The query we'll need to download when the job runs
def run(self):
try:
// Query something...
except (Exception, KeyboardInterrupt, SystemExit):
# TODO: The KeyboardInterrupt does not seem to work...
print '*** shutting down ***'
pool.shutdown()
pool.wait()
Вот так я начинаю:
# Initialize a pool, 12 threads in this case
pool = workerpool.WorkerPool(size=12)
# Loop over input file and create a job to download the URL on each line
for query in open(options.file):
job = QueryJob(query)
pool.put(job)
Если бы я хотел, чтобы это прекратилось до его завершения, я нажимаю Ctrl-C, но ничего не происходит. Затем я несколько раз пробую Ctrl-C также безрезультатно. Наконец, я сделаю Ctrl-Z, а затем найду идентификатор процесса и сделаю kill -9
, чтобы остановить все потоки.
Это единственный, кто хочет это сделать? Нет ли способа на самом деле поймать KeyboardInterrupt, как я пытаюсь сделать выше?
Обратите внимание, в except
я пробовал другие вещи, такие как sys.exit()
и raise
. Но кажется, что он даже не достигает этой точки, и Ctrl-C не оказывает никакого влияния на выполнение потоков.
Есть что-то тривиальное, что я упускаю?
Спасибо.