使连接保持活动状态aiohttp ClientSession

时间:2019-02-21 03:43:32

标签: python python-asyncio aiohttp

我正在将异步“ 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应用程序。

0 个答案:

没有答案