请求发布的Python错误:'连接已中止,超时('写入操作超时')

5vf7fwbs  于 2023-02-20  发布在  Python
关注(0)|答案(2)|浏览(285)

我正在使用requests post发送一些数据,现在我已经将www.example.com的超时值设置requests.post为60左右。其他类似的问题与特定的应用程序有关,所以我想将其作为一般的python错误来问。
这是我得到的错误:

failed to connect  ('Connection aborted.', timeout('The write operation timed out'))

我假设这是因为某种原因我的线程无法及时发送所有数据,但我不确定,所以只是想检查一下。所以:
1.这个错误的发生是因为线程不能在超时时间内发送所有的数据吗?
1.如果是这样的话,有没有我可以设置超时的方式,只有启动后,我发送了所有的数据了?我不想等待永远的服务器响应,但显然我想定时器启动时,我发送所有的数据了,而不是在函数调用的开始.(和数据我发送的大小变化)

brc7rcf0

brc7rcf01#

如果你使用的是python-request library,你可以把'timeout'参数指定为一个元组,第一个元素是“connectiontimeout”,第二个元素是“readtimeout”。

requests.get('http://google.com', timeout=(10,200) # give it 10 seconds to connect to the server, and timeout if server does not send any data back for 200+ seconds

requests使用urrlib3.util.Timeout。Per the urllib3 docs,将读取超时设置为None将永远等待服务器响应。但是,我同意永远等待是个坏主意。
您在请求中发送了多少数据?我通读了一些python请求代码,但找不到一种简单的方法来检测请求何时发送完毕。
作为概念验证,我基于urequests (micro requests)编写了this code
它允许你传递一个回调函数给requests.get(),这个回调函数将在所有请求数据发送之后,服务器收到任何数据之前被触发。

import time

def sent_callback():
    print('The request has finished sending at', time.time())

resp = get('http://google.com', send_callback=sent_callback)
print('response received at', time.time())

print('resp.text=', resp.text)
kulphzqa

kulphzqa2#

这可能是因为一个网络问题,如果该项目被带到一个生产服务器与高速互联网,应该解决这个问题(我仍然要检查我的项目)。
但是对于开发来说,你可以给予一下:

# ('Connection aborted.', TimeoutError('The write operation timed out')): Increase chunksize
storage.blob._DEFAULT_CHUNKSIZE = 5 * 1024 * 1024
storage.blob._MAX_MULTIPART_SIZE = 5 * 1024 * 1024

相关问题