Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 30, 2016 23:30:02

ivanzzz
Зарегистрирован: 2016-02-08
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

многопоточность

Есть файл со строками вида:
xx.yy ab - zz.uu cd
это не столь важно, так вот генерация списка всех записей из фала в 600 строк может занять ~3 мин., а 600 строк это самая малость. У вот я подумал как реализовать многопоточность. Я сделал так:

with open(ids,'r') as file:
        id = module_id.ID()
        for line in file:
            id_set = id.get_ip_set(line)
            for i in xrange(THREAD):
                TH = threading.Thread(target=thread_body,args=(id_set,))
                TH.daemon = True
                owners.append(TH)
                TH.start()
            for TH in owners:
                TH.join()
def thread_body(id_set):
    while len(id_set):
        print id_set.pop()
    pass
считываю из файла по одной строке генерирую ее и передаю множество в руки потокам. Проблема в том, что когда потоки обработают множество и количество записей в множестве станет меньше чем потоков то они начнут простаивать. Как сделать чтобы в тот момент когда записи начинают кончатся начали генерироваться следующие?
Хотел по завершению цикла, но так можно потерять потоки если не успеют добавиться новые записи, да и метод может быть вызван не 1 раз.
    while len(id_set):
        print id_set.pop()
    else:
         generate()
Как быть?

Офлайн

#2 Апрель 30, 2016 23:53:21

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

многопоточность

ivanzzz
Есть файл со строками вида:xx.yy ab - zz.uu cdэто не столь важно, так вот генерация списка всех записей из фала в 600 строк может занять ~3 мин., а 600 строк это самая малость. У вот я подумал как реализовать многопоточность. Я сделал так:
ivanzzz
Как быть?
Разобраться что за генерация которая 3 минуты занимает. По вашему сообщению можно подумать что это чтение из файла столько времени занимает.

А так смотрите https://docs.python.org/2/library/queue.html



Офлайн

#3 Май 1, 2016 00:05:56

ivanzzz
Зарегистрирован: 2016-02-08
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

многопоточность

Ну с той генерацией автору предстоит разобраться, а мне нужно чтобы id_set при приближению к концу пополнялось)

Офлайн

#4 Май 1, 2016 10:15:41

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

многопоточность

ivanzzz
а мне нужно чтобы id_set при приближению к концу пополнялось)
:)
Мне кажется вам нужно привести реальный код. Так как у вас написано в тредах только len и pop выполняются. По причине наличия в питоне gil разбиение на треды код только замедлит. И все ваши потуги выглядят как мартышкин труд.

Балансирование нагрузки на выполняется очередями, ссылку я вам уже дал.



Офлайн

#5 Май 1, 2016 18:44:48

ivanzzz
Зарегистрирован: 2016-02-08
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

многопоточность

doza_and
Мне кажется вам нужно привести реальный код
Это метод имитации полезной работы. )

Офлайн

#6 Май 2, 2016 03:44:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

многопоточность

ivanzzz
У вот я подумал как реализовать многопоточность.
Скорее всего, ты просто что-то неправильно сделал.

ivanzzz
600 строк это самая малость
Многопоточность имеет смысл, когда там десятки тысяч строк.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version