Выполнить Azure Python функцию из другой Azure Python функции - PullRequest
1 голос
/ 05 апреля 2020

это наверное нубский вопрос. У меня есть Azure функция, которая отвечает на запросы HTTP, и она работает нормально, я могу вызвать ее из браузера или из скрипта Python 3.8.

Я хочу создать другую функцию, которая будет иметь Timer Trigger и вызовет HTTP trigger function по расписанию.

HTTP Trigger function возвращает простую строку с результатами выполнения.

Теперь мой код для Timer trigger function использует Python Requests и он работает локально каждый раз, но будет работать только 1/10 раз при развертывании на Azure. В других случаях он возвращает ошибку, когда достигает тайм-аута 30 минут. Все это должно длиться не более 1-2 минут, поэтому я не понимаю, где оно застревает.

В случае успеха это работает (я вижу в серверной части HTTP trigger script), но в azure регистрирует, что регистратор сохраняет 404 error страницу html вместо строки, которую HTTP trigger function должна вернуть.

Вот код функции Timer Trigger:

import datetime
import logging

import azure.functions as func

import requests

def main(mytimer: func.TimerRequest) -> None:
    URL = "https://rob-functions.azurewebsites.net/api/ss_kite_scrape_http"
    r = requests.get(url = URL) 
    data = r.text
    logging.info(f'TIMER TRIGGER HAS RUN. RESULT:{data}')

Как устранить неполадки или почини это? Проблема с журналированием не так важна, но проблема с тайм-аутом должна быть каким-то образом исправлена, и я не знаю, с чего начать, так как она отлично работает локально.

1 Ответ

1 голос
/ 09 апреля 2020

Согласно некоторым тестам, я встречал проблему, похожую на вашу. Я создаю HttpTrigger с кодом по умолчанию (я добавляю строку time.sleep(20) в нем). А затем я создаю TimerTrigger (выражение cron 0 */1 * * * *) с модулем requests для вызова функции HttpTrigger. Эти две функции находятся в одном приложении функций, кажется, проблема была вызвана взаимодействием двух функций, но я не знаю почему. Все эти две функции кода выглядят хорошо.

Для временного решения я создаю две функции (HttpTrigger и TimerTrigger) в разных приложениях функций и развертываю их в двух приложениях функций в azure. Тогда это работает нормально, они не будут взаимодействовать друг с другом.

Надеюсь, это поможет ~

...