LINUX.ORG.RU

python многопоточность

 


0

0

Как правильно её приделать, если юзаю треды не получается нормально прибить потоки.
Если юзаю модуль multiprocessing не могу получить общий доступ к переменной.
Дайте пример что-ли пожалуйста.

★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

Развивайте сознание и внимательно читайте _всю_ доку по модулю threading

anonymous
()

Используй мультипроцессинг и очереди для обменя данными или сокеты. А лучше забудь о многопоточности. Это питон.

der_looser ★★
()

если юзаю треды не получается нормально прибить потоки.

В 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 ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от anonymous

скорее практика подсказывает, что питон и многопоточность - это как забег по граблям. если можно не использовать ее, то лучше не использовать:)

der_looser ★★
()

Если не листал, то рекомендую ознакомиться с книжкой М. Лутца Программирование на python. Он там варианты реализации многопоточности рассматривает.

der_looser ★★
()

если юзаю треды не получается нормально прибить потоки

а как ты их прибиваешь?

multiprocessing не могу получить общий доступ к переменной

адресное пространство разное, нужно городить костыли.

x0r ★★★★★
()
Ответ на: комментарий от x0r

а как ты их прибиваешь?

У меня в четыре потока грузиться страница сайта, парситься и т.д.(рекурсивно) Пробовал прибивать с помощью обычного флага(переменной), к примеру за 25сек все потоки прибиться не успевают, а больше ждать тоже не вариант для меня

FIL ★★★★
() автор топика
Ответ на: комментарий от der_looser

Забыть никак, мне она тут полюбому нужна.

FIL ★★★★
() автор топика
Ответ на: комментарий от FIL

А здесь точно нужны общие переменные? Рабочие процессы могут получать URL и возвращать разобранный документ (и то, и другое - через очереди).

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от mashina

Надо совершить некое действие определенное количество раз, поэтому это контролируется общей переменной.

FIL ★★★★
() автор топика
Ответ на: комментарий от FIL

какое действиет? Что всё нужно клещами вытягивать. В общем, делаьть нужно через процессы и очереди, как своетуют в треде. Если алгоритм не разворачивается в очереди, что весьма сомнительно, то нужно смотреть сюда. Value() скорее всего подойдёт.

mashina ★★★★★
()
Последнее исправление: mashina (всего исправлений: 2)
Ответ на: комментарий от mashina

Спасибо за наводку.

FIL ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.