Задать вопрос

Питон 3 и потоки?

начал учить питон 3 и на данный момент пытаюсь применять на практике потоки (обертка concurrent.futures)

выходит очень глючно и я даже знаю причину — от непонимания их устройства


на данный момент, удалось узнать два приема работы с потоками:

— использование threading.Event, чтобы в главном потоке ставить флаги, которые без проблем могут получать все потоки

— использование Queue — потоки кладут в очередь задания, а главный поток таймером чекает очередь и эти задания выполняет (после этого я отказался от сигналов и слотов pyqt, т.к. не вижу в них необходимости)


Но многое все же остается непонятным

— откуда лучше вызывать добавление в очередь задания «уменьшить счетчик активных потоков в GUI» — из process_result или воркера?

— надо ли дополнительно вызывать уменьшение счетчика, если поток например отменен или вылетел?

с этим дикая путаница — потоки то уходят в минус, то 60 штук просто зависает

— можно ли создать класс работы с конфигом (config.ini) в базовом классе главного потока и дать потокам возможность обращаться к нему и читать из него настройки?

— если это вызывает проблемы, то как же тогда передать всем файлам настройки — только в атрибутах запуска потока?


ну и все же хотелось бы попросить порекомендовать какую-нибудь литературу, которая смогла бы избавить меня от подобных вопросов

я хочу знать «что можно» и «что нельзя» делать в потоках.

желательно, литературу, ориентированную на питон


также, не откажусь от помощи знающих товарищей — если вы готовы наполнить мою голову ценными знаниями, я готов пополнить ваш счет вебмани :)
  • Вопрос задан
  • 2976 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
powerman
@powerman
Systems Architect, Senior Go/Perl Linux Developer
Прошу прощения, я не знаю «что можно» и «что нельзя» делать в потоках третьего питона, но раз за двое суток по теме никто не ответил, я отвечу немного не по теме.

Я бы порекомендовал вместо поисков «что можно» и «что нельзя» изучить «как надо» работать с потоками вообще. А потом, уже понимая что Вы хотите получить, изучать как именно нечто подобное можно сделать в третьем питоне. А «надо» с потоками работать в стиле CSP — это самый простой подход, превращающий многопоточное программирование из очень сложной, запутанной и глючной. К сожалению, он подразумевает использование действительно большого количества потоков, что невозможно если каждому потоку выделять довольно большой стек (что делают практически все реализации потоков в разных языках и ОС). Поэтому «пощупать» это можно, например, на языке Go, или на stackless питоне.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы