Skip to content

Commit a62156c

Browse files
author
yuniszhang
committed
解决get_auth并发问题
1 parent 9460f0e commit a62156c

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

qcloud_cos/cos_client.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -241,12 +241,13 @@ def get_auth(self, Method, Bucket, Key, Expired=300, Headers={}, Params={}, Sign
241241
print (auth_string)
242242
"""
243243

244-
# 解决一个没有搞懂的问题:如果保持参数Headers={},那么实测会发现两个线程的Headers指向同一个内存地址
244+
# python中默认参数只会初始化一次,而Headers={}是一个字典会传址(非传值),那么多个线程的Headers指向同一个内存地址
245245
# request.headers=Headers,后续会用request.headers来保存Authorization值,在多线程并发时就会出现Authorization值被其它线程改写
246+
# 所以这里判断当Headers={}时重新生成实例,避免默认参数实例复用,导致多线程访问问题
246247
if not Headers:
247-
Headers = dict() # 重新生成实例,避免Request通过{}复用内存
248+
Headers = dict()
248249
if not Params:
249-
Params = dict() # 重新生成实例,避免Request通过{}复用内存
250+
Params = dict()
250251

251252
url = self._conf.uri(bucket=Bucket, path=Key)
252253
r = Request(Method, url, headers=Headers, params=Params)

0 commit comments

Comments
 (0)