Найти - Пользователи
Полная версия: Уведомить основную программу о совершении какого-то действия
Начало » Центр помощи » Уведомить основную программу о совершении какого-то действия
1 2
mitya_s_v
Есть функция, которая в отдельном потоке качает файлы, хочу сделать progressbar. В связи с этим встал вопрос как уведомить программу о том, что очередной файл скачался.
В pyqt можно было-бы использовать сигналы, а как решить эту задачу используя стандартную библиотеку не знаю. В какую сторону курить?

P.S предполагаю, что это можно решить с помощью callback функции, но не уверен, что это тут уместно и нормальная это практика или нет?
JOHN_16
mitya_s_v
может быть посмотреть на модуль signal ?
mitya_s_v
Не знал о таком, сейчас гляну. Кстати, вообще по логике ещё для этого может подойти стандартный механизм исключений.
Хотелось бы узнать, можно его использовать для моих целей. Я где-то вроде читал, что это приемлемая практика.
mitya_s_v
JOHN_16
А кроме модуля signal как ещё можно обмениваться данными между потоками?
py.user.next
mitya_s_v
как ещё можно обмениваться данными между потоками?
Неблокирующая очередь queue.Queue()
пример
mitya_s_v
py.user.next
Неблокирующая очередь queue.Queue()
Да это самый широко освещённый способ. Мне его применять не особо хочется. Нужно будет проверять по таймеру эту очередь и т д
В идеале хочется найти аналог сигналов pyqt, но похоже такого нет

Какие варианты есть кроме объекта в глобальной области видимости (имею ввиду queue.Queue())?
Alen
mitya_s_v
Какие варианты есть кроме объекта в глобальной области видимости (имею ввиду queue.Queue())?

Queue не обязательно должна находится в глобальной области видимости, можно её передавать как параметр между функциями. Также рекомендую посмотреть этот код:
http://stackoverflow.com/questions/375427/non-blocking-read-on-a-subprocess-pipe-in-python

Ну а варианты кроме процессов и потоков – любая асинхронная библиотека, например gevent.

4kpt_III
Alen
Ну а варианты кроме процессов и потоков – любая асинхронная библиотека, например gevent.

Согласен полностью. Не потоками едиными. Хотел только заметить, что Светлов писал про gevent. Вроде как он не есть гуд и может ломаться в самый неподходящий момент. Но, как я понимаю, все зависть от задач. Я больше использую tornado. Когда-то пробовал твистед, но он у меня не пошел.

P.S. Жаль, что asyncio только на 3.4 и выше…
mitya_s_v
4kpt_III
Я больше использую tornado. Когда-то пробовал твистед
Думаю это не для моего случая. Это слишком огромные проекты, чтобы с помощью их просто скачать несколько файлов.
Но за совет спасибо.

4kpt_III
P.S. Жаль, что asyncio только на 3.4 и выше…
А в asyncio есть нужные мне инструменты?
4kpt_III
mitya_s_v
А в asyncio есть нужные мне инструменты?

Простите за оффтоп. Это я общался с Alen. По вашему вопросу. Я бы посмотрел вот вот этот интересный пост. А так вообще конечно зависит от задачи. Если там действительно нужно скачать небольшое количество файлов небольшого размера, то может и треды не нужны? Все зависит от задачи. Вообще если есть тяжелые задачи и необходимо их решать отдельно от основного процесса и основной процесс от них не сильно то и зависим, то используют специальные инструменты.

P.S. Asincio не намного меньше
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