Как Вы создаете демона в Python?

В контексте Selenium ссылка является устаревшей , когда ссылка недействительна, поскольку указанный элемент был удален или устарел, так как элемент был отсоединен и затем присоединен клиентским скриптом , Не зная точной механики клиентского скрипта, возможны разные решения. Самое простое - попытаться снова сослаться на элемент, т. Е.

queues = Select(driver.find_element_by_css_selector(".rowStyle1:nth-child(6).gwtListBox"))
queues.select_by_visible_text("P0_English")
time.sleep(3)
queues = Select(driver.find_element_by_css_selector(".rowStyle1:nth-child(6).gwtListBox"))
queues.select_by_visible_text("P1_English")
time.sleep(3)
queues = Select(driver.find_element_by_css_selector(".rowStyle1:nth-child(6).gwtListBox"))
queues.select_by_visible_text("P5_English")

Предполагается, что селектор CSS остается прежним после повторного присоединения списка выбора. Также существует вероятность того, что селектор станет недействительным, поскольку элемент был удален или его местоположение было изменено. В первом случае вы хотите создать исключение и обработать его соответствующим образом, а во втором - выяснить, каким будет его новый селектор, либо эмпирически, либо с помощью анализа кода скрипта на стороне клиента. Подробнее об исключении StaleElementReferenceException здесь .

237
задан Jürgen Schwietering 6 February 2019 в 04:31
поделиться

5 ответов

Текущее решение

ссылочная реализация PEP 3143 (Стандартная библиотека процесса демона) теперь доступен как демон Python .

Исторический ответ

Sander Marechal пример кода превосходит оригинал, который был первоначально отправлен в 2004. Я когда-то внес daemonizer для Пиротехнического средства, но буду, вероятно, использовать код Sander, если я должен был переделать его.

161
ответ дан Greg Dubicki 23 November 2019 в 03:24
поделиться

80% времени, когда люди говорят "демона", они только, хотят сервер. Так как вопрос совершенно неясен по этому вопросу, трудно сказать, каков возможный домен ответов мог быть. Так как сервер соответствует, запустите там. Если фактический "демон" на самом деле необходим (это редко), читайте на nohup как путь к daemonize сервер.

До тех пор, пока фактический демон на самом деле требуется, просто запишите простой сервер.

Также смотрят ссылка WSGI реализация.

Также смотрят Простой Сервер HTTP .

"Там какие-либо дополнительные вещи, которые нужно рассмотреть?" Да. Приблизительно миллион вещей. Какой протокол? Сколько запросов? Сколько времени обслужить каждый запрос? Как часто они будут прибывать? Вы будете использовать специализированный процесс? Потоки? Подпроцессы? Запись демона является большим заданием.

-27
ответ дан S.Lott 23 November 2019 в 03:24
поделиться

Самый легкий способ создать демона с Python состоит в том, чтобы использовать Скрученный событийно-ориентированная платформа. Это обрабатывает весь материал, необходимый для daemonization для Вас. Это использует Реакторный Шаблон для обрабатывания параллельных запросов.

-2
ответ дан Travis B. Hartwell 23 November 2019 в 03:24
поделиться

Существует много трудных вещей заботиться о при становлении процессом демона хорошего поведения:

  • предотвратите дампы ядра (многие демоны, выполненные как корень, и дампы ядра могут содержать уязвимую информацию),

  • ведите себя правильно внутри a chroot тюрьма

  • установите UID, GID, рабочий каталог, umask, и другие параметры процесса соответственно для варианта использования

  • оставьте поднятый suid, sgid полномочия

  • закройте все открытые дескрипторы файлов с исключениями в зависимости от варианта использования

  • ведите себя правильно, если запущено в уже отсоединенном контексте, такой как init, inetd, и т.д.

  • настройте обработчики сигналов для разумного поведения демона, но также и с определенными обработчиками, определенными вариантом использования

  • перенаправьте стандартные потоки stdin, stdout, stderr так как процесс демона больше не имеет терминал управления

  • обработайте файл PID как совместную консультативную блокировку, которая является целой кучей проблем сам по себе со многими противоречащими, но допустимыми способами вести себя

  • позвольте надлежащую очистку, когда процесс будет завершен

  • на самом деле станьте процессом демона, не ведя зомби

Некоторые из них являются стандартными, как описано в канонической литературе Unix (Усовершенствованное Программирование в Среде UNIX, последним W. Richard Stevens, Addison-Wesley, 1992). Другие, такие как потоковое перенаправление и обработка файла PID, являются стандартным поведением, которое ожидало бы большинство пользователей демона, но которое менее стандартизировано.

Все они покрыты PEP 3143 “Стандартная спецификация” библиотеки процесса демона. Ссылочная реализация демона Python работает над Python 2.7 или позже и Python 3.2 или позже.

162
ответ дан bignose 23 November 2019 в 03:24
поделиться

Хотя можно предпочесть чистое решение Python, предоставленное модулем демона Python, существует daemon(3) функция в libc - по крайней мере, на BSD и Linux - который сделает правильную вещь.

Вызов его из Python легок:

import ctypes

ctypes.CDLL(None).daemon(0, 0) # Read the man-page for the arguments' meanings

единственной остающейся вещью сделать является создание (и блокирующий) файла PID. Но это можно обработать себя...

0
ответ дан 23 November 2019 в 03:24
поделиться
Другие вопросы по тегам:

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