LINUX.ORG.RU

История изменений

Исправление 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()