我正在将异步“ 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”打印回客户端。事实证明,它与应用程序的长时间执行无关。当我异步上传许多图像时。在最后几张图像完成上传之前,服务器仍会引发相同的异常。
注意:我正在使用女服务员在服务器端提供Flask应用程序。