@ru_python

Страница 1999 из 9768
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

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
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
Не читал, поэтому и пришел за помощью в чат
Прочитай. Сильно полезнее будет чем спрашивать тут. Еще советую "эффективное программирование tcp/ip"

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
def worker(queue): ____while True: ________url = queue.get() ________some_code ________queue.task_done() как-то так у меня
Из бесконечного цикла выходишь по завершению задачи?

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
@TrickOrTreat нет, не выхожу...
ну вот, все логично, поэтому воркеры и не завершаются)) нужно брякаться из цикла когда закончил работу

Google
Dmitriy
06.01.2017
13:25:24
уже сделал, спасибо, все работает

немного офигел, когда сообщение твое прочел про бесконечный цикл))

Roman
06.01.2017
13:29:47
def worker(queue): ____while True: ________url = queue.get() ________some_code ________queue.task_done() как-то так у меня
Либо глобальная переменная-флаг, либо спец-таск по получению которого воркер завершается

Dmitriy
06.01.2017
13:30:56
Остановился на варианте, что все треды кинуть в лист, а потом их все .join() Спасибо за помощь) До этого с флагом делал, но не понимал как сделать для нескольких тредов

Народ, я опять с потоками) К примеру, у меня есть 1000 url, которые нужно обработать 5ю потоками. Как это сделать? Если я делаю 5 потоков - обработаются 5 ссылок, 10 - десять ссылок. Не могу допетрить как заставить потоки снова и снова обрабатывать весь список урлов.

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

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
нужно сделать именно с потоками и именно с таким количеством потоков, которое юзер задаст

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

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

Roman
06.01.2017
16:04:50
Чо такое task_done?
Это метод у Queue

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

Denis
06.01.2017
16:05:02
Это метод у Queue
Зачем он тут нужен?

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

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

я днем уже задавал этот вопрос

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

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

Марк
06.01.2017
16:08:14
def parsing(queue): ____while True: ________url = queue.get() ________some_code ________queue.task_done() ________break
def parsing(queue): while True: url = queue.get() some_code queue.task_done() break Форматирование тут освой и не мучайся

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
http://pastebin.com/5mHYdTtp
Неплохо бы наследоваться от object

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
Неплохо бы наследоваться от object
Если третий, смысла нет

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

Страница 1999 из 9768