Функция Azure — HTTP-триггер и ответ — Python

Я работаю с шаблоном HTTP Python функции Azure, который имеет этот код:

import os
import json

postreqdata = json.loads(open(os.environ['req']).read())
response = open(os.environ['res'], 'w')
response.write("hello world from "+postreqdata['name'])
response.close()

Все это прекрасно работает. Но при попытке реализовать его в моем пакете сценариев Python ответ никогда не отправляется обратно.

Вот как выглядит мой код:

import os
import json

postreqdata = json.loads(open(os.environ['req']).read())

while True:

mode = 0

 if mode == 0:

        response = open(os.environ['res'], 'w')
        response.write("Mode selected is 0, testing has begun.")
        response.close()
        test.testing()

Как вы можете видеть, мой скрипт Python test.testing() работает в своем собственном цикле и работает успешно, но я никогда не получаю ответа. Даже если я поставлю код «ответ» последним.

Я просто хочу вызвать HTTP POST, который выполняет скрипт и получает ВЫВОД

«Выбран режим 0, тестирование началось».

сообщение только один раз, и пусть скрипт test.testing() творит чудеса в цикле.

Я почти уверен, что не понимаю логику правильно, дайте мне знать, если кто-нибудь может указать мне правильное направление. Текущая версия Python — 2.7, и для этого не нужно обновляться до 3.


person Victor Angel Cruz    schedule 13.06.2018    source источник
comment
Вам действительно не следует использовать функции Python V1 для чего-либо, что является производственным или критическим. поддержка Python в функциях v1 очень экспериментальная, довольно тяжелая и неэффективная.   -  person ahmelsayed    schedule 14.06.2018


Ответы (1)


Функции должны быть недолговечными, они не должны запускать длинные циклы, особенно вечные циклы.

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

Избавьтесь от While или добавьте break и убедитесь, что время выполнения всей функции меньше 5 минут (или любое другое максимальное ожидаемое время отклика).

person Mikhail Shilkov    schedule 13.06.2018
comment
Спасибо, но я подписываюсь на учетную запись PayAsYouGo AppService, которая позволяет мне постоянно запускать функции, за которую я плачу. Ограничение в 5 минут распространяется на бесплатные аккаунты или аккаунты уровня потребления. (см. docs.microsoft.com/en-us/azure/ azure-functions/functions-scale) Не могли бы вы подтвердить, где именно я могу добавить разрыв? - person Victor Angel Cruz; 13.06.2018
comment
Хотя принцип по-прежнему работает - person Mikhail Shilkov; 13.06.2018
comment
Не могли бы вы подтвердить, где именно я могу добавить перерыв? - person Victor Angel Cruz; 13.06.2018
comment
Нет, я не понимаю цели всего этого пока-если, трудно сказать, чего именно вы пытались добиться - person Mikhail Shilkov; 13.06.2018
comment
У меня есть другие. Если режим == 1, 2, 3 и т. д. ниже кода, я должен опубликовать их тоже? Это просто циклы других функций - person Victor Angel Cruz; 13.06.2018
comment
Опубликуйте код, где изменяется режим и когда цикл завершается, если это так - person Mikhail Shilkov; 13.06.2018
comment
В основном он работает до 2 часов, а затем передает информацию в журнал с помощью: self.write_log («Функция выполнена»), но этот код находится в другом импортируемом скрипте .py. - person Victor Angel Cruz; 13.06.2018
comment
Должна ли это быть функция, активируемая таймером или очередью, а не HTTP (без ответа)? - person Mikhail Shilkov; 13.06.2018
comment
Дело в том, что я хочу иметь возможность реализовывать различные HTTP-ответы в зависимости от того, как далеко продвинулся сценарий. Может быть, я могу говорить об этом неправильно. Но в более широком плане, если приложение отправляет POST в функцию Azure с данными, функция получает POST, активирует скрипт, использует POST INPUT для скрипта. Затем скрипт будет реагировать на различные выполняемые функции. - person Victor Angel Cruz; 13.06.2018