Я отправляю асинхронные запросы POST на некоторый удаленный URL, на котором развернут код моего приложения.Брандмауэр сервера реализует длительное время ожидания соединения, если между запросом и сервером в течение более 120 секунд отсутствует связь между запросом.Но иногда моя заявка занимает больше 120 секунд.Есть ли способ сохранить сеанс, пока приложение завершает обработку запроса?
Вот код
import asyncio
import aiohttp
import os
import time
timeout = aiohttp.ClientTimeout(total=6000) # 10分钟
headers = {'content-type': 'multipart/form-data'}
async def send_file(path, f_name):
file_path = os.path.join(path, f_name)
url = "http://myurl"
async with aiohttp.ClientSession(timeout=timeout) as session:
async with session.post(url, data={'photo': open(file_path, 'rb')}) as response:
data = await response.text()
data = f_name + "-" + data.split("\n")[5]
print(data)
futures = []
folder = "path\to\folder" #更改此处的目录
now = time.time()
for path, subdir, files in os.walk(folder):
for f_name in files:
futures.append(send_file(path, f_name))
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(futures))
print("Total time: ", time.time() - now)
Сервер принудительно закрывает соединение через некоторое время, не обрабатывая всезапрос со следующим исключением.
aiohttp.client_exceptions.ClientOSError: [WinError 10054] An existing connection was forcibly closed by the remote host
Обновление: поэтому я упростил свое приложение на стороне сервера, чтобы просто напечатать клиенту «Hello World», когда я загружаю изображение на сервер.Оказывается, это не имеет ничего общего с длительным исполнением приложения.Когда я загружаю много изображений асинхронно.Сервер по-прежнему выдает то же исключение до завершения загрузки нескольких последних изображений.
Примечание. Я использую официантку для обслуживания колб на стороне сервера.