
Dumitru
06.01.2017
11:16:32

Aragaer
06.01.2017
11:19:19
да я сам для себя все это только сейчас открыл 8)

Dumitru
06.01.2017
11:20:30
?

Google

Aragaer
06.01.2017
11:20:57
If the message is too long to pass atomically through the underlying protocol, the error EMSGSIZE is returned, and the message is not transmitted.
это кстати симметричное про отправку
отправлять тоже можно только одним куском или вручную дели на части
поэтому да, один к одному sendto-recvfrom

Dumitru
06.01.2017
11:22:04

Dmitriy
06.01.2017
12:20:03
что-то не могу догнать как несколько сделать
нид хелп

Oleksii
06.01.2017
12:27:31
http://www.regexprn.com/2010/05/killing-multithreaded-python-programs.html

Max
06.01.2017
12:53:09
Если воркеры не уходят в бесконечный луп, можно ждать завершения потока каждого воркера:
def get_pages(self, urls):
q = Queue.Queue()
for url in urls:
q.put(url)
wait_for_threads = []
for i in xrange(self.thread_count):
t = threading.Thread(target=self.parsing, args=(q,))
t.start()
wait_for_threads.append(t)
for thread in wait_for_threads:
thread.join()
q.join()
return self.results

Dmitriy
06.01.2017
12:54:22
хитро, спасибо - попробую)
В таком случае скрипт вообще не завершается, а потоки не делают то, что мне нужно
считается ли плохим тоном использовать t.daemon = True?

Google

Roman
06.01.2017
13:08:14
sys.exit?

Dmitriy
06.01.2017
13:12:48
не работает

Dumitru
06.01.2017
13:13:17
Мы уже разобрались выше

Max
06.01.2017
13:14:01

Roman
06.01.2017
13:14:16

Dmitriy
06.01.2017
13:15:31
@TrickOrTreat убрал, проблема осталась

Dumitru
06.01.2017
13:16:12

Roman
06.01.2017
13:17:11
А ты task_done в воркере зовешь?

Dmitriy
06.01.2017
13:17:39
юзаю

Roman
06.01.2017
13:18:00

Dumitru
06.01.2017
13:18:30

Dmitriy
06.01.2017
13:18:58
def worker(queue):
____while True:
________url = queue.get()
________some_code
________queue.task_done()
как-то так у меня

Max
06.01.2017
13:22:14

Dmitriy
06.01.2017
13:22:49
@TrickOrTreat нет, не выхожу...

b0g3r
06.01.2017
13:23:23
http://www.python-camelot.com/ кто-нибудь юзал?

Max
06.01.2017
13:25:10

Google

Dmitriy
06.01.2017
13:25:24
уже сделал, спасибо, все работает
немного офигел, когда сообщение твое прочел про бесконечный цикл))

Roman
06.01.2017
13:29:47

Dmitriy
06.01.2017
13:30:56
Остановился на варианте, что все треды кинуть в лист, а потом их все .join()
Спасибо за помощь)
До этого с флагом делал, но не понимал как сделать для нескольких тредов
Народ, я опять с потоками)
К примеру, у меня есть 1000 url, которые нужно обработать 5ю потоками. Как это сделать? Если я делаю 5 потоков - обработаются 5 ссылок, 10 - десять ссылок. Не могу допетрить как заставить потоки снова и снова обрабатывать весь список урлов.

Denis
06.01.2017
16:02:31
self.parsing в студию

Стас Щетинников
06.01.2017
16:02:59

Dmitriy
06.01.2017
16:03:07
def parsing(queue):
____while True:
________url = queue.get()
________some_code
________queue.task_done()
________break

Denis
06.01.2017
16:03:25
break убери
Ты после первого урла ливаешь

Dmitriy
06.01.2017
16:03:38
нужно сделать именно с потоками и именно с таким количеством потоков, которое юзер задаст

Roman
06.01.2017
16:03:59

Denis
06.01.2017
16:04:08
Чо такое task_done?

Стас Щетинников
06.01.2017
16:04:10

Dmitriy
06.01.2017
16:04:40
break убери
проходили, если убрать - ничего не будет делаться

Roman
06.01.2017
16:04:50

Dmitriy
06.01.2017
16:04:51
@schetinnikov ну, типо того :D

Denis
06.01.2017
16:05:02

Dmitriy
06.01.2017
16:05:10
task_done нужен для очереди
ну чтобы показать, что один урл отработан

Google

Denis
06.01.2017
16:05:30
Я без него делал и все нормально было
Судя по докам, он тут не нужен
И break не нужен

Dmitriy
06.01.2017
16:06:27
окей, без него тоже работает)
но вопрос несколько в другом)
как заставить N потоков обработать >N ссылок

Denis
06.01.2017
16:06:28
Надо только выход в конце сделать

Admin
ERROR: S client not available

Denis
06.01.2017
16:06:44
Например, кинут в очередь 5 None

Dmitriy
06.01.2017
16:06:45
брейк нужен
без него ни один url не отрабатывается

Roman
06.01.2017
16:06:45
Зачем он тут нужен?
http://stackoverflow.com/questions/1593299/python-queue-get-task-done-question

Denis
06.01.2017
16:06:58

Dmitriy
06.01.2017
16:07:22
могу закомментить и раскомментить строчку и привести скрины
я днем уже задавал этот вопрос

Roman
06.01.2017
16:07:34

Dmitriy
06.01.2017
16:07:35
только что проверил

Denis
06.01.2017
16:07:41

Dmitriy
06.01.2017
16:07:52
@pragus это так важно?)

Roman
06.01.2017
16:07:54

Марк
06.01.2017
16:08:14

Dmitriy
06.01.2017
16:09:48
http://pastebin.com/5mHYdTtp
@MarkEgorov учту, спасибо

Google

Denis
06.01.2017
16:10:40
20 и 21 удали

Roman
06.01.2017
16:10:49

Denis
06.01.2017
16:11:04
И делай print при каждом гете

Roman
06.01.2017
16:11:12
И полечить импорты

Dmitriy
06.01.2017
16:11:20
делаю, там нормально все
что с имортами не так?

Denis
06.01.2017
16:11:33

Roman
06.01.2017
16:12:13

Dmitriy
06.01.2017
16:12:25
20 и 21 удали
убрал, ничего не происходит, скрипт не завершает свою работу
импорт с try-except делал чтобы на 3й ветке тоже работал
object не вставлял по этой причине

Denis
06.01.2017
16:12:51
Наверно потому что ему надо дохрена урлов получить

Dmitriy
06.01.2017
16:13:19
ну окей, но хотя бы один обработаться да должен
разве нет?

Denis
06.01.2017
16:13:41
Откуда ты знаешь, что он не обработался?

Roman
06.01.2017
16:14:41
У тебя ничего не происходит в парсере
Да, просто делать get - моветон и опасно
Я бы завел методы start/stop, а в init завел self.running