Глобальные переменные в приложении-функции Python в AzurePython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Глобальные переменные в приложении-функции Python в Azure

Сообщение Anonymous »

У меня есть приложение-функция Azure, в котором мне нужно текущее значение даты и времени (-3 часа) в нескольких функциях Python.

Чтобы убедиться, что каждая функция использует одно и то же время , я генерирую объект datetime глобально перед определениями функций и позже использую его внутри функций:

Код: Выделить всё

from datetime import datetime, timedelta
import pytz

# get the current time in the correct timezone. Since triggers are executed based on UTC, we then again subtract
#   3 hours (just to be save) to end up with the correct day
current_time = datetime.now(tz=pytz.timezone('Europe/Berlin'))
current_time -= timedelta(days=(3 / 24))

def _file_exists() -> bool:
filename = current_time.strftime('%Y-%m-%d.csv')
# ... further code

def main():
save_as = '{path}/{filename}'.format(path=path_raw, filename=filename)
# ... further code
Мне не нужно изменять содержимое, поэтому глобального ключевого слова здесь нет.

Однако, когда я публикую эту функцию в Azure (Python 3.8, Linux), она анализирует сценарий и устанавливает для переменной current_time значение даты и времени загрузки. и он фиксируется для всех последующих исполнений (timerTrigger). Например, я загрузил свою функцию вчера, и с тех пор команда logging.warning(current_time) в main() выводит 2020-04-14 08:31:05.003618+02:00.

Если я попробую это локально (Python 3.7, Windows, PyCharm), это будет работать нормально, даже если я скомпилируйте файлы вручную:

Код: Выделить всё

python test.py    # 2020-04-15 11:30:36.426750+02:00
python test.py    # 2020-04-15 11:31:00.439632+02:00

python -m compileall .
python __pycache__/test.pyc # 2020-04-15 11:33:27.189967+02:00
python __pycache__/test.pyc # 2020-04-15 11:33:36.853601+02:00
Это ошибка в Azure? И/или каков наилучший обходной путь?
Связано ли это с (не)изменяемыми типами, и если да, есть ли у кого-нибудь ссылка, объясняющая это для этого случая (мне известно о поведении в параметрах классов/функций)?

Я подумываю о том, чтобы определить его глобально как None и установить значение в функции _init() в скрипте, которая вызывается где-то в скрипте.

Изменить: После нескольких неудачных попыток я обнаружил, что

Код: Выделить всё

# get the current time in the correct timezone. Since triggers are executed based on UTC, we then again subtract
#   3 hours (just to be save) to end up with the correct day
current_time = None

def _init_current_time():
global current_time
current_time = datetime.now(tz=pytz.timezone('Europe/Berlin')) - timedelta(days=(3 / 24))

def main():
_init_current_time()
# main code
выполняет свою работу. Пока что я могу с этим работать, просто это кажется очень... грязным. Итак, продолжая вопрос, существует ли правильное решение?


Подробнее здесь: https://stackoverflow.com/questions/612 ... p-on-azure
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»