Вывод значения в другую функцию при продолжении цикла - PullRequest
1 голос
/ 28 февраля 2012

G'afternoon.В настоящее время у меня есть цикл с использованием Python v2.x, который постоянно обнаруживает информацию через беспроводную карту.Я хочу реализовать следующее: если цикл, например, обнаруживает известный пакет (идентифицированный через уравнение сравнения в цикле), значение известного пакета будет передано другой функции для дальнейшей обработки (например, электронная почта для sysadmin)пока оригинальный цикл продолжает работать одновременно, пока создается электронное письмо.

Нужно ли это поточить или, если я использую цикл, будет ли это продолжаться автоматически?Я предполагаю, что как только определенное значение будет передано другой функции, цикл остановится, но я не уверен.

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Конечно, вам нужна многопоточная или многопроцессорная обработка.

for pkt in pkts:
    if pkt=="known packet":
        spawnNewThreadOrProcess(pkt)
        doOtherStuff()

Если вы не создадите новый поток или не обработаете, операторы будут выполняться последовательно, а не одновременно.

Я хочу добавить, что если вы передаете известный пакет функции, которая все равно создает новый процесс потока, тогда, очевидно, вам не нужно об этом беспокоиться. Но дело в том, что цикл будет выполнять операторы последовательно, если не будет создан новый поток выполнения или процесс.

0 голосов
/ 28 февраля 2012

(как и следовало ожидать) зависит от того, что вы подразумеваете под одновременно .Если у вас есть цикл

while 1:
    info = get_sensor_info()
    if is_important(info):
        email(info)

, то цикл не остановится только потому, что вы вызвали другую функцию!Конечно, email, являясь частью цикла, будет выполняться последовательно.

То есть последовательность событий будет выглядеть следующим образом:

  • Получить информацию о датчике. Тогда :
  • Если информация важна, отправьте ее по электронной почте. Тогда :
  • Снова получить информацию о датчике. Тогда :
  • Если информация важна, отправьте ее по электронной почте. Тогда :
  • ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...