Каковы некоторые лучшие практики для управления фоновыми потоками в IIS?

Примените функцию проверки к каждой строке кадра данных:

df['Holiday'] = df.apply(lambda x:\
                   calendar().holidays(start=x['Start Date'],
                                       end=x['End Date']).size, axis=1)\
  .astype(bool) # Convert the answer to a boolean
#0    False
#1     True
#2    False
#3    False
12
задан Simon Johnson 19 March 2009 в 14:14
поделиться

2 ответа

На основе моего опыта можно заставить это работать "достаточно хорошее", но не прекрасные. Я рекомендовал бы реализовать Ваши задачи повторения в сервисе окон. В зависимости от того, что делают задачи, служба Windows, возможно, не должна была бы даже говорить с веб-приложением или наоборот, например, если обе работы с той же базой данных. Иначе Вы могли все еще использовать, например, WCF для коммуникации.

Большое преимущество: сервис окон запустится с ОС, можно легко настроить, запустить и остановить его с помощью панели управления, у Вас есть встроенный контроль с помощью Windows Event Log, можно обновить фоновый сервис и веб-приложение независимо и т.д.

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

  1. Запустите свой фоновый поток в Application_start (Global.asax) и сохраните ссылку потока в статической переменной.
  2. Перенеситесь каждый метод обратился к Вашему фоновому потоку с попыткой/выгодой, потому что начиная с.NET 2.0, каждое необработанное исключение на фоновом потоке закроет приложение. (Это будет перезапущено по следующему запросу, но это замедляет следующий запрос, уничтожает все текущие сессии и кэши, и конечно никакой таймер не будет активен до следующего запроса.)
  3. По каждому запросу (реализованный имеет HttpModule или в Global.asax снова), проверьте экземпляр Потока в глобальную переменную (это все еще! = пустой указатель, поток, активный и рабочий и т.д.). В противном случае назовите код перезапуска. Используйте привязку части перезапуска, чтобы удостовериться, что поток не будет создан дважды в то же время.

Даже затем Вы не можете быть уверены, что Ваш фоновый поток всегда работает, если у Вас нет обычного трафика круглосуточно. Также имейте в виду, что в общей среде хостинга очень распространено закрыть пулы приложений, если нет никакого действия в течение нескольких часов. Вы могли попытаться улучшить это путем установки запланированной задачи на клиентской машине в собственной сети, делающей легкий Запрос HTTP на приложении каждые несколько минут, только гарантировать, что приложение всегда работает.

6
ответ дан 2 December 2019 в 20:19
поделиться

Когда Jeff сделал Stackoverflow, у него была подобная проблема.

Его решение состояло в том, чтобы использовать истечение кэша. Вы поместили что-то в кэш и затем когда он истекает, событие запущено в поток направления лица, не использующего своего права. В конечном счете обработчик для истечения, Вы всовываете некоторый код, чтобы повторно добавить объект к кэшу и сделать независимо от того, что работа обслуживания должна быть сделана для Вашего приложения

Используя эту технику, легко отвечают Вашим дополнительным вопросам:

  1. Вы проверяете, что объект находится все еще в кэше.
  2. Если объект не находится в кэше, повторно добавьте его.
  3. Удалите объект кэша из кэша.
  4. Добавьте объект назад к кэшу.

Вы могли сделать маленькую страницу управления для конфигурирования этих опций.

Это дает Вам хороший путь примерно к процессам обслуживания времени в Вашем веб-приложении. Это не требует отдельной службы Windows, которая является большой победой.

10
ответ дан 2 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: