ConcurrentGuiUtils - Показать прогресс длительной операции
===================================================================================

    .. py:function:: showLongWait(spec, fn, *args, **kwargs)

        Запускает пользовательскую функцию в отдельном потоке и поднимает диалог 
        отображающий прогресс. Тип диалога зависит от флага из перечисления 
        :meth:`~axioma.gui.ProgressSpec`. В пользовательскую функцию будет 
        передан :class:`~axioma.core.PythonProgressHandler` как первый аргумент 
        функции

        :param spec: Данные для инициализации диалога отображающего прогресс
        :type spec: :class:`~axioma.gui.ProgressSpec`
        :param fn: Пользовательская функция
        :type fn: :class:`function`
        :param args: Набор аргументов которые будут переданы в пользовательскую функцию при вызове
        :type args: :class:`tuple`
        :param kwargs: Словарь который будет передан в пользовательскую функцию при вызове
        :type kwargs: :class:`dict`


Пример использования:

.. Когда нет необходимости вручную управлять прогрессом операции, а просто хочется
.. чтобы графический интерфейс "не зависал" то можно использовать :meth:`~showLongWait`
.. как показано на примере ниже.

Без управления прогрессом можно запустить вычисления следующим образом:

.. literalinclude:: ../../../../../examples/concurrent/EndlessProgress.py
    :language: python


При необходимости управлять прогрессом операции или обрабатывать отмену 
вычислений нужно использовать :class:`~axioma.core.PythonProgressHandler` который всегда
передаётся в пользовательскую фукнцию как первый аргумент

.. literalinclude:: ../../../../../examples/concurrent/ProgressWithCancel.py
    :language: python


