Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 2, 2018 11:42:42

SeregaGomen
Зарегистрирован: 2017-06-24
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод информации о прогрессе длительного процесса, реализованного в библиотеке

Коллеги! Столкнулся со следующей проблемой (актуальной, по-моему, не только для питона). Вызываю из numpy функцию решения системы линейных алгебраических уравнений. Делаю это так:

     
    # Прямое решение СЛАУ
    def _solve_direct(self):
        self._progress.set_process('Solving of equation system...', 1, 1)
        self.__global_matrix_stiffness = self.__global_matrix_stiffness.tocsr()
        try:
            self.__global_load = spsolve(self.__global_matrix_stiffness, self.__global_load)
        except ArpackError:
            return False
        self._progress.set_progress(1)
        return True
Собственно в чем вопрос. Если СЛАУ большая, то данный процесс может занимать значительное время. Как сделать анимацию прогресса вычислений? Ну может быть какой-нибудь параллельный процесс запустить, где слеш бы на экране вертелся или что-то в этом духе… Что посоветуете? Куда копать?
P.S. “Ковыряние” в исходниках библиотеки не предлагать!

Офлайн

#2 Дек. 2, 2018 19:10:36

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Вывод информации о прогрессе длительного процесса, реализованного в библиотеке

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



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Дек. 2, 2018 19:44:00

SeregaGomen
Зарегистрирован: 2017-06-24
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод информации о прогрессе длительного процесса, реализованного в библиотеке

Так-то оно так. Но в данном случае предполагается, что мы используем библиотечную процедуру, которая не должна зависнуть (в моем случае СЛАУ либо решится, либо нет). Просто хочется, чтобы пользователь видел, что что-то таки происходит в программе.

Отредактировано SeregaGomen (Дек. 2, 2018 19:44:19)

Офлайн

#4 Дек. 3, 2018 09:17:18

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Вывод информации о прогрессе длительного процесса, реализованного в библиотеке

Так я об этом и говорю - вы достоверно не знаете об этом и можете вводить в заблуждение.
Конечно если вам очень хочется, то запускайте нагруженный код в отдельном потоке/процессе, а в основном играйтесь с выводом на консоль. Что бы не подключать ncurses и ими подобными есть простой способ - спец символ \r - возврат коретки без переноса строки. МОжно писать поверх предыдущего символа и так симулировать что процесс идет. Правда не помню работает ли это в случае с виндовой консолью



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Дек. 3, 2018 10:03:46

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Вывод информации о прогрессе длительного процесса, реализованного в библиотеке

JOHN_16
Правда не помню работает ли это в случае с виндовой консолью
работает.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version