Очень хакерское решение, но оно работает. Я зацикливаю строки данных и использую addLabelOnlyMarkers
с центроидом многоугольника строк, используя st_centroid
. Я запускаю функцию pal
на каждой итерации.
for(i in 1:nrow(nc2)) {
text_col = pal(nc2$NAME[i])
p <- p %>%
addLabelOnlyMarkers(data = st_centroid(nc2[i,]),
label = ~NAME,
labelOptions = labelOptions(
noHide = T, textOnly = T,
style = list('color' = text_col)
)
)
}
Я все еще приветствую любое лучшее решение этого ...
Я сделал некоторое экспериментирование с тем же типом кода, делающего некоторый трудоемкий вход в систему отдельного потока. Это, кажется, работает хорошо, но я не протестировал его в производственной среде.
Единственная разница между Вашим кодом и мой - то, что я использовал пул потоков вместо того, чтобы настроить новый поток.
Вы, вероятно, заставите копии из любого запросить данные и другую информацию о странице для предотвращения их располагаемый, но кроме этого я думаю, что это должно работать хорошо.
Я сделал som преобразование видео / обрабатывающий с ffmpeg на фильмах, загруженных пользователями на веб-форме, и это работало прекрасное, даже если поток занял несколько часов для завершения! Очень важно иметь в виду, что трудно узнать состояние потока, таким образом регистрируясь, и обработка ошибок extreamly важный.
Коллега недавно сделал это для некоторого экспорта данных. Клиент вошел бы в (веб-) панель управления и затем нажимать некоторые кнопки и что не и затем файл был бы FTP'd прочь к некоторому мистическому серверу.
Фронтэнд был сделан с помощью Ajax ASP, и как @bang говорит, поток выполняется хорошо, но это - абсолютное дерьмо для отслеживания.
Ajax использовался для обновления индикатора выполнения и строки состояния в UI, который был хорош в теории и в то время как набор данных был только несколькими сотнями строк. Но как только мы начали работать с реальным набором данных (миллионы строк), весь UI не пустил взрыв с ошибками из-за тайм-аута. В этой точке Вы теряете связь с фоновым потоком...
Это все еще работает? Экспорт закончился? Что произойдет, если я обновлю страницу и нажму кнопку снова? Дом выполнения отправит два продукта людям?
Это - определенный кошмар. Он в настоящее время переписывает его для выполнения как консольное приложение, запланированное с планировщиком задач окон, соединенным проводом до таблицы заданий, которая содержит детали экспорта то выполнение потребности.
Если это кажется небольшим shonkey, Вы могли бы всегда писать свой продолжительный процесс с чем-то вроде сервера сокета и иметь Ваш код aspx - позади, общаются с этим.
Знайте, что рабочий IIS перерабатывает настройки, поскольку они могли все еще влиять на Ваш поток после того, как он был запущен. Удостоверьтесь, что Вы ловите любые исключения и регистрируете их.