Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 22, 2014 09:29:10

k2name
Зарегистрирован: 2014-08-22
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Потоки и массив. Помогите разрулить.

Доброго времени суток всем. Уперся в следующую схему:
Имеется массив значений 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()

Поясняю переменные:
thread_count - принимается параметром из консоли. Число потоков.
target - массив ip адресов
port - массив портов

Передается все на
def potok(target, port ):
        jsend(target, port )

В данном примере я затупил. И каждый ip у меня проверялся каждым потоком. А как вынести все наружу - не могу сообразить. Тупо надо уникальные значения в потоки передавать.

Офлайн

#2 Авг. 22, 2014 09:56:12

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Потоки и массив. Помогите разрулить.

Ну, потому, что у вас идет цыкл перебора всех айпишников внутри запихивания в треды. Вот бы поменять местами для начала. А ещё лучше создать очередь - queue



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#3 Авг. 22, 2014 11:19:33

k2name
Зарегистрирован: 2014-08-22
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Потоки и массив. Помогите разрулить.

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)

Офлайн

#4 Авг. 22, 2014 11:24:51

k2name
Зарегистрирован: 2014-08-22
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Потоки и массив. Помогите разрулить.

Именно поэтому я откатился на первый вариант и считаю его более удобным. Но проблема в том, что логически не могу себе цепочку действий построить. Или отдельную функу пистаь выбора ip из диапазона и выдачу на исполнение либо же удалять в массиве использованные ip. Что приведет к фрагментации и задержкам в работе.

Офлайн

#5 Авг. 22, 2014 12:35:57

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Потоки и массив. Помогите разрулить.

В случае заисания потока, вам надо бы сделать ещё один тред - которые контролирует все треды и убивает по заданному таймауту.
Вот кстати, неплохая ссылка



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#6 Сен. 2, 2014 15:10:52

TroSer
От: Харьков
Зарегистрирован: 2013-11-13
Сообщения: 65
Репутация: +  3  -
Профиль   Отправить e-mail  

Потоки и массив. Помогите разрулить.

offtop

k2name
функу писта
бедный функ

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version