Найти - Пользователи
Полная версия: Потоки и массив. Помогите разрулить.
Начало » Python для новичков » Потоки и массив. Помогите разрулить.
1
k2name
Доброго времени суток всем. Уперся в следующую схему:
Имеется массив значений 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 у меня проверялся каждым потоком. А как вынести все наружу - не могу сообразить. Тупо надо уникальные значения в потоки передавать.
Master_Sergius
Ну, потому, что у вас идет цыкл перебора всех айпишников внутри запихивания в треды. Вот бы поменять местами для начала. А ещё лучше создать очередь - queue
k2name
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
Именно поэтому я откатился на первый вариант и считаю его более удобным. Но проблема в том, что логически не могу себе цепочку действий построить. Или отдельную функу пистаь выбора ip из диапазона и выдачу на исполнение либо же удалять в массиве использованные ip. Что приведет к фрагментации и задержкам в работе.
Master_Sergius
В случае заисания потока, вам надо бы сделать ещё один тред - которые контролирует все треды и убивает по заданному таймауту.
Вот кстати, неплохая ссылка
TroSer
offtop
k2name
функу писта
бедный функ
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB