Получение MemoryError при отправке пост-запроса на загрузку файла, размер файла значительно меньше 4 ГБ, в чем проблема? - PullRequest
0 голосов
/ 07 апреля 2020

32-разрядная python 2.7.10, 16 ГБ ОЗУ в системе. Использование python request.

Получение MemoryError при попытке загрузить файлы размером менее 4 ГБ (самый большой - около 700 000 КБ) с помощью почтового запроса.


def upload_item(username,url_key,in_package,tpk_id,layer_name,extent,token,cert):

    """
        Upload the input TPK, this is using a post request
        through the requests module, returns a response of success or failure of
        the uploaded TPK. This can then be used to update the tiles
        in the tile service
    """
    try:
        #update Item URL
        update_url = 'https://{}.maps.arcgis.com/sharing/rest/content/users/{}/items/{}/update'.format(url_key,username,tpk_id)
        #opens Tile Package
        files_up = {"file": open(in_package, 'rb')}

        data = {'f':'json',
            'token':token,
            'name':layer_name,
            'title': layer_name,
            'itemId':tpk_id,
            'filetype': 'Tile Package',
            'overwrite': 'true', # existing item, overwrite is set to true
            'async':'true',
            'extent':extent}

        response = requests.post(update_url, data=data, files=files_up, verify = cert).json()

        print response

        return response

    except:
        line, filename, synerror = trace()
        raise FunctionError(
                {
                    "function": "upload_package",
                    "line": line,
                    "filename": filename,
                    "synerror": synerror
                }
        )

- это действительно 700 000 КБ, слишком много для 32-битного python обрабатывать? Или я ошибаюсь по этому вопросу? Где-то есть кеш, который мне нужно очистить, который может хранить старый запрос? (Я собрал кучу во время тестирования)

Наименьший размер, который мне удалось загрузить в этом запросе, составил около 130 000 КБ, поэтому код работает.

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

...