Асинхронная загрузка в Shiny | Кодементор

С момента выпуска Блестящий 1.1.0, у нас есть возможность использовать асинхронные операции. Я опишу, почему и как я реализовал асинхронную загрузку.

Проблема

R является однопоточным по своей природе. Вы можете установить R на мощный сервер с 64 ядрами ЦП, но по умолчанию R будет использовать только одно из них. Это может затруднить получение хорошей производительности вашего приложения script cq.

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

Решение

Чтобы решить эту проблему, я переписал свой код генерации отчетов таким образом, чтобы он выполнялся асинхронно. Для этого я использовал следующие библиотеки:

  • будущее : используется для выполнения длительной операции отчета в рабочем процессе, работающем в фоновом режиме, оставляя тем временем (основные) процессы Shiny свободными для обслуживания других пользователей.
  • обещания : для обработки результата длительной операции отчета обратно в процесс Shiny, где мы можем отобразить результат (загруженные файлы) обратно пользователю.
  • ipc : используется для отображения (совместимого с асинхронным) индикатора выполнения.
Тестирование

Чтобы проверить, работает ли оно, откройте блестящее приложение (см. ссылку ниже) на двух вкладках браузера. Когда вы нажимаете «Загрузить отчет» на 1-й вкладке, вы по-прежнему можете использовать приложение на 2-й вкладке.

Вы можете просмотреть приложение, включая исходный код на моем Shinyapps.io

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *