Форум сайта python.su
0
Доброго времени суток всем. Уперся в следующую схему:
Имеется массив значений ip. Массив значений портов.
Имеется N-ое количество потоков.
В каждый поток нужно передать уникальное значение из диапазона ip (можно просто следующее) и целиком массив портов.
Пытался делать так:
thread_count = int(sys.argv[1]) threads = [] for j in xrange(thread_count): for i in range(len(target)): thread = threading.Thread(target=potok, args=(target[i], port )) thread.start() threads.append(thread) for t in threads: t.join()
def potok(target, port ): jsend(target, port )
Офлайн
7
Ну, потому, что у вас идет цыкл перебора всех айпишников внутри запихивания в треды. Вот бы поменять местами для начала. А ещё лучше создать очередь - queue
Офлайн
0
q_ips = Queue() #-------------------------- # функция создания потока #-------------------------- def potok(ports): while not q_ips.empty(): ip = q_ips.get() jsend(ip, ports)
thread_count = '' thread_count = int(sys.argv[1]) if thread_count: threads = [] for j in xrange(thread_count): thread = threading.Thread(target=potok, args=(ports, )) thread.start() threads.append(thread) for t in threads: t.join() else: print "Usage: %s <threads>" % sys.argv[0] sys.exit()
Отредактировано k2name (Авг. 22, 2014 11:20:00)
Офлайн
0
Именно поэтому я откатился на первый вариант и считаю его более удобным. Но проблема в том, что логически не могу себе цепочку действий построить. Или отдельную функу пистаь выбора ip из диапазона и выдачу на исполнение либо же удалять в массиве использованные ip. Что приведет к фрагментации и задержкам в работе.
Офлайн
7
В случае заисания потока, вам надо бы сделать ещё один тред - которые контролирует все треды и убивает по заданному таймауту.
Вот кстати, неплохая ссылка
Офлайн
3
offtop
k2nameбедный функ
функу писта
Офлайн