История изменений
Исправление tailgunner, (текущая версия) :
если юзаю треды не получается нормально прибить потоки.
В Python это невозможно (и даже в Си это сомнительная практика). Используй условие выхода.
Дайте пример что-ли пожалуйста.
class InterruptibleQueue(Queue):
# копия Queue.join, но с тайм-аутом
def join(self):
self.all_tasks_done.acquire()
try:
while self.unfinished_tasks:
self.all_tasks_done.wait(9999)
finally:
self.all_tasks_done.release()
# ....
while True:
try:
cmd = q.get()
if cmd == None:
break
else:
exec_cmd(cmd)
except:
print >>sys.stderr, "FAIL"
tb.print_exc()
finally:
q.task_done()
В Python3 баг, который обходит InterruptibleQueue, могли уже исправить.
Исходная версия tailgunner, :
если юзаю треды не получается нормально прибить потоки.
В Python это невозможно (и даже в Си это сомнительная практика). Используй условие выхода.
Дайте пример что-ли пожалуйста.
class InterruptibleQueue(Queue):
# копия Queue.join, но с тайм-аутом
def join(self):
self.all_tasks_done.acquire()
try:
while self.unfinished_tasks:
self.all_tasks_done.wait(9999)
finally:
self.all_tasks_done.release()
# ....
while True:
try:
cmd = q.get()
if cmd == None:
break
else:
exec_cmd(cmd)
except:
print >>sys.stderr, "FAIL"
tb.print_exc()
finally:
q.task_done()