Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 29, 2017 09:34:56

Dezex
Зарегистрирован: 2015-12-08
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Прерывание скрипта по таймеру

Утро доброе!

  • Структура скрипта:
    Process 0:
    subprocess 1 (n копий скрипта a)
    subprocess 2 (1 копия скрипта b)
  • Process 0 в петле_0 смотрит на вывод от subprocess 2 и при наличии сообщения пишет к subprocess 1
  • subprocess 1 в петле_1 смотрит на вывод от Process 0 и при наличии сообщений исполняет действия.
Мне нужно прерывание работы subprocess 1-2 либо:
1) руками
2) по таймеру

Меня интересует реализация 2).

Работаю на Linux, для него нашел оптимальное решение через signal package
(https://stackoverflow.com/questions/492519/timeout-on-a-function-call)

Думаю сделать поуневирсальнее, чтоб и на Windows работало (хотя врят ли буду пользоваться) - опыт.
Гуглил, но одназначного ничего не нашел.

Пока думаю, что оптимальным будет создание subprocess 3, в котором будет крутиться таймер… но опять путаница:

либо

А) subprocess 3 пишет в вывод событие, Process 0 в петле_0 дойдя до этого пишет ко всем subprosecc 1, которые увидя это в петле_1 останавливаются и ждут др. указаний….
- Но здесь будут задержки и в петле_0 и в петле_1.

- В этом случае нет смысла делать subprocess 3: в циклах можно сравнивать с таймером
 timeout = time.time() + 60*5 # 5 minutes from now
...
if time.time() > timeout: break

Б) В subprocess 3 должен генериоваться опять же signal (Linux), а для Windows??

Прошу помочь разобраться.

Офлайн

#2 Июнь 29, 2017 09:46:20

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Прерывание скрипта по таймеру

Dezex
Прошу помочь разобраться.
Начать надо с того что вам надо разобраться когда необходимо использовать thread когда multiprocessing а когда subprocess а когда async.

В вашем посте нет данных которые позволяют понять что вам надо. Пока очевидно одно, в вашем решении даже близко нельзя говорить об оптимальности как с точки зрения простоты реализации так и с точки зрения переносимости между разными ОС.

Так что начните с описания задачи, а потом прочтите о перечисленных выше подходах.



Офлайн

#3 Июнь 29, 2017 10:38:38

Dezex
Зарегистрирован: 2015-12-08
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Прерывание скрипта по таймеру

doza_and
Задача связаны с сетевым трафиком: генерация IGMPv2 report и отслеживание IGMPv2-query.

А) Для каждого VLAN_N из списка List_1 нужна генерация IGMPv2-report пакетов в количестве X. Каждый пакет в VLAN_N имеет индивидуальные параметры: IP (src/dst), MAC(src/dst).
Генерация пакетов происходит разово при наличии пакета IGMPv2-query.

Б) Параллельно с событиями А) запускается сниффер_1, который при наличии IGMPv2-query передают команду на повторную генерацию пакетов из А).

В) Также думаю параллельно запускать сниффер_2, который для каждого VLAN_N будет проверять наличие мультикаста в ответ на каждый b]IGMPv2-report из списка X. Периодически.

  • Значение X может достигать 250, VLAN_N (N до 30).
  • Генерация каждого пакета должна быть в пределах 10сек после получения соответ-о IGMPv2-query.
  • Генерация - использую scapy.
  • Снифер - сторонний, не питоновский (Linux - tcpdump, Windows - пока не нарыл).
    Сниффер от scapy не подходит, так как не видит теги 802.1q.

К сожелению мало опыта в параллельном выполнении сценариев, сразу ушел в subprocess.

Как я понимаю в моем случае действия А) правильнее через multiprocessing сделать. Через threading громоздко получиться.

Ну а для Б), В) только через subprocess

Отредактировано Dezex (Июнь 29, 2017 10:46:55)

Офлайн

#4 Июнь 29, 2017 10:48:51

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2830
Репутация: +  186  -
Профиль   Отправить e-mail  

Прерывание скрипта по таймеру

Какая задержка у таймера, как реализовать простой таймер на сигналах я уже писал: http://python.su/forum/topic/30947/?page=1#post-168204



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Июнь 29, 2017 10:55:03

Dezex
Зарегистрирован: 2015-12-08
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Прерывание скрипта по таймеру

Rodegast
Какая задержка у таймера, как реализовать простой таймер на сигналах я уже писал: http://python.su/forum/topic/30947/?page=1#post-168204

Windows не поддерживает signal.SIGALRM, если я не ошибаюсь.

Офлайн

#6 Июнь 29, 2017 12:47:19

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2830
Репутация: +  186  -
Профиль   Отправить e-mail  

Прерывание скрипта по таймеру

Ты сначала хоть что-то для linux-а сделай, а потом думай что переделывать и кому оно нужно. Как вариант можешь в отдельном потоке запустить бесконечный цикл и в нём делать прерывание снифера.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version