Я не могу загрузить полный список рассолов в azure webapp - PullRequest
0 голосов
/ 06 августа 2020

У меня есть Azure веб-приложение, сложенное на python и запускающее приложение flask для вызова функции, и эта функция возвращает список названий стран, которые я сохранил в файле pickle. Допустим, у меня всего 100 стран, поэтому всякий раз, когда я запускаю приложение, оно считывает 100 стран из этого файла рассола, но иногда он застревает в 98 или 99 странах, поэтому не уверен, где я теряю 1 или 2 страны из этого списка. Эта проблема возникает только в веб-приложении azure, в противном случае извлекаются полные 100 стран. Ниже приведен код, который я использую для загрузки файла рассола со списком стран 100:

import pickle
path=os.getcwd()+'\\'
def example():
    country_list=pickle.load(open(path+"support_file/country_list.p","rb"))
    print(len(country_list))
    return country_list

Вот мой flask app.py для вызова функции:

from other_file import example
from flask import Flask, request

app = Flask(__name__)

@app.route("/", methods=["POST", "GET"])
def query():
    if request.method == "POST":
        return example()
    else:
        return "Hello!"


if __name__ == "__main__":
    app.run()

Приведенный выше список затем используется в функции, и мой вывод зависит от всех элементов этого списка, но если один или два элемента пропадают при загрузке этого рассола, мой вывод изменяется. Так что я не упускаю эти элементы постоянно, но это происходит, скажем, 1 из 20 раз, так это проблема Azure веб-приложения или что-то не так с моим рассолом? Я пытался воссоздать рассол, но время от времени возникала одна и та же проблема.

1 Ответ

0 голосов
/ 18 августа 2020

Кажется, загрузка pickle читает, пока буфер не заполнится. Итак, вам придется повторять, как показано ниже, до тех пор, пока не появится исключение EOF. К сожалению, мне не удалось найти изящный способ запустить l oop без исключения исключения. Вам также может понадобиться кэшировать список вместо того, чтобы извлекать из него выборку при каждом запросе, чтобы оптимизировать производительность.

with open(os.getcwd()+'/support_file/country_list.p','rb') as f:
    country_list = []
    while True:
        try:
            country_list.append(pickle.load(f))
        except EOFError:
            break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...