рд╕рд╛рд░рд╛рдВрд╢ред
рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо
рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░рдиреЗ рддрдХ рд╕рднреА рд░рд╛рдо рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо
рдЫрджреНрдо рдХреЛрдб:
def function():
proxies = {
'https': proxy
}
session = requests.Session()
session.headers.update({'User-Agent': 'user - agent'})
try: #
login = session.get(url, proxies=proxies) # HERE IS WHERE MEMORY LEAKS
except: #
return -1 #
return 0
$ python -m requests.help
{
"chardet": {
"version": "3.0.4"
},
"cryptography": {
"version": ""
},
"idna": {
"version": "2.6"
},
"implementation": {
"name": "CPython",
"version": "3.6.3"
},
"platform": {
"release": "10",
"system": "Windows"
},
"pyOpenSSL": {
"openssl_version": "",
"version": null
},
"requests": {
"version": "2.18.4"
},
"system_ssl": {
"version": "100020bf"
},
"urllib3": {
"version": "1.22"
},
"using_pyopenssl": false
}
рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ
python -m requests.help
рдпрджрд┐ рд╡рд╣ рдЖрдкрдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо (рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо, рдЖрджрд┐) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
@sigmavirus24 рд╣реЛ рдЧрдпрд╛
рдЕрд░реЗ @munroc , рдЖрдкрдХреЗ рдереНрд░реЗрдбрд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рддреНрд╡рд░рд┐рдд рдкреНрд░рд╢реНрди рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЫрджреНрдо рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рддреНрд░ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдк рдХрд┐рд╕ рдереНрд░реЗрдбрдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рд░рд┐рд╕рд╛рд╡ рдХрд╣рд╛рдБ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХрд┐рд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдк рдкрд░рд┐рдгрд╛рдо рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?
рд╣рдореЗрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рддреНрд░реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЗ рд╕рдВрдХреЗрдд рдорд┐рд▓реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдзреВрдореНрд░рдкрд╛рди рдмрдВрджреВрдХ рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрд╖реНрдЯрд┐ рдкреНрд░рднрд╛рд╡ рдорд┐рд▓рд╛ рд╣реИред
@nateprewitt рд╣реИрд▓реЛ, рд╣рд╛рдБ, рдореИрдВ рд╣рд░ рдзрд╛рдЧреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рддреНрд░ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдБред рдереНрд░реЗрдб рдкреВрд▓ 30 рд╣реИред рдореИрдВрдиреЗ рд╡реИрд╕реЗ рднреА 2 - 200 рдзрд╛рдЧреЗ рдФрд░ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдПрдХ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдЕрднреА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рд╣реИ:
рд▓реЙрдЧрд┐рди = session.get рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рдкрд╕реА 0 рдбрд╛рд▓реЗрдВ рдФрд░ рдХреЛрдИ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдирд╣реАрдВред рдЕрдЧрд░ рдореИрдВ рд▓реЙрдЧрд┐рди = рд╕рддреНрд░ рдХреЗ рдмрд╛рдж рд╡рд╛рдкрд╕реА 0 рдбрд╛рд▓рддрд╛ рд╣реВрдВред рд╕реНрдореГрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдореИрдВ рдЖрдкрдХреЛ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реВрдВ рдореЗрд░рд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдмрд╣реБрдд рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред
@Munroc рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреВрд░рд╛ рдХреЛрдб рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░рдг рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЛрдб рд╕рд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИ рдХрд┐ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк return
рддреБрд░рдВрдд рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ session.get
, рддреЛ рдХреЗрд╡рд▓ proxies
рдФрд░ session
рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдореЛрд░реА рдореЗрдВ рдореМрдЬреВрдж рд░рд╣реЗрдВрдЧреЗ (рдУрд╡рд░рд╕рд┐рдореНрдкреНрд▓реАрдлрд╛рдЗрдб.. рд▓реЗрдХрд┐рди рдореИрдВ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдорд┐рд▓ рдЧрдпрд╛ рд╣реЛрдЧрд╛: рдореБрд╕реНрдХрд╛рди :)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЖрдк рдПрдХ рдмрд╛рд░ рдлреЛрди session.get(url, proxies=proxies)
, рдХреЗ рдПрдЪрдЯреАрдПрдордПрд▓ url
рдФрд░ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬрд╛ login
рдЪрд░ред рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ session.get
рдХреЙрд▓ "рдРрд╕рд╛ рд▓рдЧреЗрдЧрд╛" рдХрд┐ рд╡реЗ рд╕реНрдореГрддрд┐ рдХреЛ рд▓реАрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ (рд╕реНрдореГрддрд┐) рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ url
рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝ рд░рд╣рд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк рддреБрд░рдВрдд рдмрд╛рдж рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдФрд░ .join()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдзрд╛рдЧреЗ рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдП рдЧрдП - рдФрд░ рдХреНрдпрд╛ рд╡реЗ рдареАрдХ рд╕реЗ рдмрдВрдж/рд╕рд╛рдл рдХрд┐рдП рдЧрдП рдереЗред
@LeoSZN рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдк рдХрдИ Process
рдкреНрд░рддрд┐ urls
рддрддреНрд╡реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо Process
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдВрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдХреНрдпрд╛ рдЖрдк p.daemon = True
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдореЛрдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ (рддрд╛рдХрд┐ рдПрдХ рдмрд╛рд░ рдореБрдЦреНрдп рдзрд╛рдЧрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдП, рд╕рднреА рдЙрддреНрдкрдиреНрди рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рднреА рдорд░ рдЬрд╛рддреА рд╣реИрдВ)? рдЕрдиреНрдпрдерд╛, рдЙрддреНрдкрдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВ рдФрд░ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрди рд╕рднреА рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред
@initbar
рдХреНрдпрд╛ рдореБрдЭреЗ p.daemon = True
рд▓реВрдк рдореЗрдВ рдпрд╛ рд▓реВрдк рдХреЗ рдмрд╛рд╣рд░ p.join()
рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рд╡реИрд╕реЗ рдХреНрдпрд╛ рдореБрдЭреЗ p.join()
рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА p.daemon = True
?
_рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдирдП рд╡рд┐рд╖рдп рд╕реЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЖрдкрдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рджреЗрдВред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░реЗ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо рдЙрдард╛рдП..._
рдореИрдВ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмреЙрдЯ рдЪрд▓рд╛рддреЗ рд╕рдордп рдлреНрд░реА рдореЗрдореЛрд░реА рдбрд┐рдЧреНрд░реЗрдбреЗрд╢рди рджреЗрдЦрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдЕрдкрдиреЗ рдХреЛрдб рдкрд░ рд╕рдВрджреЗрд╣ рд╣реИ; рддрдм рдореБрдЭреЗ рдмреЙрдЯ рдкрд░ рд╕рдВрджреЗрд╣ рд╣реБрдЖ рдФрд░ рдЕрдВрдд рдореЗрдВ рдореИрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдЖрдпрд╛ред :)
рдореИрдВрдиреЗ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП len(gc.get_objects()) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рд╕рдВрдЪрд╛рд░ рджрд┐рдирдЪрд░реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рдлрд┐рд░ рд╕рднреА рдмреЙрдЯ рдХреЛрдб рдХреЛ рд╕рд╛рдлрд╝ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдЬреАрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдЧрд┐рдирддреА рдмрдврд╝рд╛рддрд╛ рд╣реИред
рд▓реЗрди (gc.get_objects ()) рдкреНрд░рддреНрдпреЗрдХ рд▓реВрдк рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП
рдкреНрд░рддреНрдпреЗрдХ рд▓реВрдк рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ len(gc.get_objects()) рдХрд╛ рдорд╛рди рдмрдврд╝рддрд╛ рд╣реИред
Test N2
GetObjects len: 27959
Test N3
GetObjects len: 27960
Test N4
GetObjects len: 27961
Test N5
GetObjects len: 27962
Test N6
GetObjects len: 27963
Test N7
GetObjects len: 27964
token = "XXX:XXX"
chat_id = '111'
proxy = {'https':'socks5h://ZZZ'} #You may need proxy to run this in Russia
from time import sleep
import gc, requests
def garbage_info():
res = ""
res += "\nGetObjects len: " + str(len(gc.get_objects()))
return res
def tester():
count = 0
while(True):
sleep(1)
count += 1
msg = "\nTest N{0}".format(count) + garbage_info()
print(msg)
method_url = r'sendMessage'
payload = {'chat_id': str(chat_id), 'text': msg}
request_url = "https://api.telegram.org/bot{0}/{1}".format(token, method_url)
method_name = 'get'
session = requests.session()
req = requests.Request(
method=method_name.upper(),
url=request_url,
params=payload
)
prep = session.prepare_request(req)
settings = session.merge_environment_settings(
prep.url, None, None, None, None)
# prep.url, proxy, None, None, None) #Change the line to enable proxy
send_kwargs = {
'timeout': None,
'allow_redirects': None,
}
send_kwargs.update(settings)
resp = session.send(prep, **send_kwargs)
# For more clean output
gc.collect()
tester()
{
"chardet": {
"version": "3.0.4"
},
"cryptography": {
"version": "2.3.1"
},
"idna": {
"version": "2.7"
},
"implementation": {
"name": "CPython",
"version": "3.6.6"
},
"platform": {
"release": "4.15.0-36-generic",
"system": "Linux"
},
"pyOpenSSL": {
"openssl_version": "1010009f",
"version": "17.5.0"
},
"requests": {
"version": "2.19.1"
},
"system_ssl": {
"version": "1010007f"
},
"urllib3": {
"version": "1.23"
},
"using_pyopenssl": true
}
_рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреЛ рдореИрдВрдиреЗ рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рдкрд╛рдпрдерди 3.5.3 рдкрд░ рдХрд┐рдпрд╛ рдерд╛ред_
@LeoSZN
@initbar
рдХреНрдпрд╛ рдореБрдЭреЗ
p.daemon = True
рд▓реВрдк рдореЗрдВ рдпрд╛ рд▓реВрдк рдХреЗ рдмрд╛рд╣рд░p.join()
рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рд╡реИрд╕реЗ рдХреНрдпрд╛ рдореБрдЭреЗp.join()
рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреАp.daemon = True
?
# ..
for i in urls:
p = Process(target=main, args=(i,))
p.daemon = True # before `.start`
p.start()
# ..
рдПрдХ рдЫреЛрдЯреА рд╕реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдЕрднреА рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ .join
рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдбреЗрдореЙрди - рд▓реЗрдХрд┐рди рд╡реЗ рд▓рдЧрднрдЧ рдЧрд╛рд░рдВрдЯреА рдорд╛рд░реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрдм рдЙрдирдХреЗ рдорд╛рддрд╛ рдкрд┐рддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд (рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдмрди рдЕрдирдЬрд╛рдиреЗ рдЕрдирд╛рде, рдЬреЛ рдорд╛рдорд▓реЗ рдореЗрдВ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ! рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрдпрд╛рд░ рд╣реИ)ред
рдЕрдиреНрдпрдерд╛, рдЖрдк Process
рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
# ..
processes = [
Process(target=main, args=(i,))
for i in urls
]
# start the process activity.
рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо
рд▓реЗрди (gc.get_objects ()) рдкреНрд░рддреНрдпреЗрдХ рд▓реВрдк рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП
рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг "рдЕрдиреБрд░реЛрдз" рдХреИрд╢ рддрдВрддреНрд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдпрд╣ рдЧрд▓рдд (рд╕рдВрджрд┐рдЧреНрдз) рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдПрдкреАрдЖрдИ рдпреВрдЖрд░рдПрд▓ (рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп) рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдореЗрдВ рдХреИрд╢ рд░рд┐рдХреЙрд░реНрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдореЗрдореЛрд░реА рд▓реАрдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреИрд╢ рдХрд╛ рдЖрдХрд╛рд░ 20 рддрдХ рд╕реАрдорд┐рдд рд╣реИ рдФрд░ рдЗрд╕ рд╕реАрдорд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдХреИрд╢ рд░реАрд╕реЗрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рдмрдврд╝рддреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдкрд╕ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдкрд░ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреАред
рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдореБрджреНрджрд╛ред рдереНрд░реЗрдб рдореЗрдВ рдЪрд▓рддреЗ рд╕рдордп рдЕрдиреБрд░реЛрдз рд╕реНрдореГрддрд┐ рдЦрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб:
import gc
from concurrent.futures import ThreadPoolExecutor, as_completed
import requests
from memory_profiler import profile
def run_thread_request(sess, run):
response = sess.get('https://www.google.com')
return
<strong i="6">@profile</strong>
def main():
sess = requests.session()
with ThreadPoolExecutor(max_workers=1) as executor:
print('Starting!')
tasks = {executor.submit(run_thread_request, sess, run):
run for run in range(50)}
for _ in as_completed(tasks):
pass
print('Done!')
return
<strong i="7">@profile</strong>
def calling():
main()
gc.collect()
return
if __name__ == '__main__':
calling()
рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдореИрдВ рдПрдХ рд╕рддреНрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ requests.get
рдЪрд▓рд╛рдиреЗ рдХреЗ рд╕рд╛рде рдмрджрд▓рддрд╛ рд╣реВрдВ рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред
рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:
тЮЬ thread-test pipenv run python run.py
Starting!
Done!
Filename: run.py
Line # Mem usage Increment Line Contents
================================================
10 23.2 MiB 23.2 MiB <strong i="13">@profile</strong>
11 def main():
12 23.2 MiB 0.0 MiB sess = requests.session()
13 23.2 MiB 0.0 MiB with ThreadPoolExecutor(max_workers=1) as executor:
14 23.2 MiB 0.0 MiB print('Starting!')
15 23.4 MiB 0.0 MiB tasks = {executor.submit(run_thread_request, sess, run):
16 23.4 MiB 0.0 MiB run for run in range(50)}
17 25.8 MiB 2.4 MiB for _ in as_completed(tasks):
18 25.8 MiB 0.0 MiB pass
19 25.8 MiB 0.0 MiB print('Done!')
20 25.8 MiB 0.0 MiB return
Filename: run.py
Line # Mem usage Increment Line Contents
================================================
22 23.2 MiB 23.2 MiB <strong i="14">@profile</strong>
23 def calling():
24 25.8 MiB 2.6 MiB main()
25 25.8 MiB 0.0 MiB gc.collect()
26 25.8 MiB 0.0 MiB return
рдФрд░ рдкрд┐рдкрдлрд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[requires]
python_version = "3.6"
[packages]
requests = "==2.21.0"
memory-profiler = "==0.55.0"
рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдореИрдВ рднреА рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдореГрддрд┐ рдХреЛ рд▓рдЧрднрдЧ 0.1 - 0.9 рдкреНрд░рддрд┐ рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдпрдВ рдХреЛ "рд╕рдорд╛рд╢реЛрдзрди" рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рд╡рд╣реА, рдХреЛрдИ рдХрд╛рдордХрд╛рдЬ?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ verify=False
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдореИрдВрдиреЗ #5215 рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдПрдХ рдмрдЧ рдЙрдард╛рдпрд╛ рд╣реИ
рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реЛрдирд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рдПрдХ рдереНрд░реЗрдб рдХреЛ рдЬрдиреНрдо рджреЗрддреА рд╣реИ, рдпрд╣ рдереНрд░реЗрдб рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓реВрдк рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдпрд╣ рд▓реВрдк рдПрдХ рдПрдкреАрдЖрдИ рдХреЛ рд╕реНрдерд┐рддрд┐ рдорд╛рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ 10 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд╕реЛрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдВрдж рд╣реЛрдиреЗ рддрдХ рд▓реВрдк рдлрд┐рд░ рд╕реЗ рдЪрд▓реЗрдЧрд╛ред
requests.get
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореИрдВ рд╕реНрдкреЙрдиреНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЗрдЦрдХрд░ рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рд░реЗрдВрдЧрддрд╛ рд╣реБрдЖ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рд▓реВрдк рд╕реЗ requests.get
рдХреЙрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ рдпрд╛ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ urllib3
рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд┐рд╕реА рднреА рд░реЗрдВрдЧрдиреЗ рдкрд░ рдмрд╣реБрдд рдХрдо рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕реЗ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рджреЛ рдШрдВрдЯреЗ рдХреА рдЕрд╡рдзрд┐ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ рдФрд░ requests.get
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рджреЛ рдШрдВрдЯреЗ рдХреЗ рдмрд╛рдж 1GB+ рдкрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрдмрдХрд┐ urllib3
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рд▓рдЧрднрдЧ рд╣реЛрддрд╛ рд╣реИред рджреЛ рдШрдВрдЯреЗ рдХреЗ рдмрд╛рдж 20mbред
рдкрд╛рдпрдерди 3.7.4 рдФрд░ рдЕрдиреБрд░реЛрдз 2.22.0
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдЕрднреА рднреА рдмреАрдЯрд╛ рдЪрд░рдг рдореЗрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╣реИред рдЪрд▓реЛ, рджреЛрд╕реНрддреЛрдВ, рдЗрд╕реЗ рдкреИрдЪ рдЕрдк рдХрд░реЗрдВ! рдореИрдВ
рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди? рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХреЗ рд╕рд╛рде рд╕рд╛рдзрд╛рд░рдг POST рдЕрдиреБрд░реЛрдз рднреА рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдХреЗ рд╕рдорд╛рди рдореБрджреНрджреЗ рдХреЛ рдмрдирд╛рддрд╛ рд╣реИред
рдореЗрд░реЗ рд▓рд┐рдП рд╡рд╣реА ... рдереНрд░реЗрдбрдкреВрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рд░рд┐рд╕рд╛рд╡ рд╡рд┐рдВрдбреЛрдЬ рдкрд╛рдпрдерди 38 рдкрд░ рднреА рд╣реИред
рдЕрдиреБрд░реЛрдз 2.22.0
рдореЗрд░реЗ рд▓рд┐рдП рднреА рдРрд╕рд╛
рдпрд╣рд╛рдБ рдореЗрд░реА рдореЗрдореЛрд░реА рд▓реАрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреЛрдИ рднреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? https://stackoverflow.com/questions/59746125/memory-keep-growth-when-using-mutil-thread-download-file
рдореЗрдореЛрд░реА рд▓реАрдХ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП Session.close()
рдФрд░ Response.close()
рдХреЙрд▓ рдХрд░реЗрдВред
рдФрд░ ssl рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдХрд░реЗрдЧрд╛ рдЗрд╕рд▓рд┐рдП https urls рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдкрд░ рдореЗрдореЛрд░реА рд▓реАрдХ рдЕрдзрд┐рдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реЛрдЧреАред
рдкрд╣рд▓реЗ рдореИрдВ 4 рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдХрд░рддрд╛ рд╣реВрдВ:
рдЫрджреНрдо рдХреЛрдб:
def run(url):
session = requests.session()
response = session.get(url)
while True:
for url in urls: # about 5k urls of public websites
# execute in thread pool, size=10
thread_pool.submit(run, url)
# in another thread, record memory usage every seconds
рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдЧреНрд░рд╛рдл (y-рдЕрдХреНрд╖: MB, x-рдЕрдХреНрд╖: рд╕рдордп), рдЕрдиреБрд░реЛрдз рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореЗрдореЛрд░реА рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдмрдврд╝рддреА рд╣реИ, рдЬрдмрдХрд┐ aiohttp рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рд╕реНрдерд┐рд░ рд╣реИ:
рдлрд┐рд░ рдореИрдВ Session.close()
рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ:
def run(url):
session = requests.session()
response = session.get(url)
session.close() # close session !!
рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдХрдореА рдЖрдИ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдЕрднреА рднреА рд╕рдордп рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рд╣реИ:
рдЕрдВрдд рдореЗрдВ рдореИрдВ Response.close()
рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ:
def run(url):
session = requests.session()
response = session.get(url)
session.close() # close session !!
response.close() # close response !!
рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд┐рд░ рд╕реЗ рдХрдо рд╣реЛ рдЧрдпрд╛, рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдмрдврд╝рд╛:
aiohttp рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ рдФрд░ рдЕрдиреБрд░реЛрдз рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ ssl рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХрдиреЗрдХреНрд╢рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдмрдВрдж рди рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
class MemoryReporter:
def __init__(self, name):
self.name = name
self.file = open(f'memoryleak/memory_{name}.txt', 'w')
self.thread = None
def _get_memory(self):
return psutil.Process().memory_info().rss
def main(self):
while True:
t = time.time()
v = self._get_memory()
self.file.write(f'{t},{v}\n')
self.file.flush()
time.sleep(1)
def start(self):
self.thread = Thread(target=self.main, name=self.name, daemon=True)
self.thread.start()
def plot_memory(name):
filepath = 'memoryleak/memory_{}.txt'.format(name)
df_mem = pd.read_csv(filepath, index_col=0, names=['t', 'v'])
df_mem.index = pd.to_datetime(df_mem.index, unit='s')
df_mem.v = df_mem.v / 1024 / 1024
df_mem.plot(figsize=(16, 8))
рд╡реНрдпрд╡рд╕реНрдерд╛ рдЬрд╛рдирдХрд╛рд░реА:
$ python -m requests.help
{
"chardet": {
"version": "3.0.4"
},
"cryptography": {
"version": ""
},
"idna": {
"version": "2.8"
},
"implementation": {
"name": "CPython",
"version": "3.7.4"
},
"platform": {
"release": "18.0.0",
"system": "Darwin"
},
"pyOpenSSL": {
"openssl_version": "",
"version": null
},
"requests": {
"version": "2.22.0"
},
"system_ssl": {
"version": "1010104f"
},
"urllib3": {
"version": "1.25.6"
},
"using_pyopenssl": false
}
рдПрд╕рдПрд╕рдПрд▓ рд░рд┐рд╕рд╛рд╡ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╡рд┐рдВрдбреЛрдЬрд╝ рдФрд░ рдУрдПрд╕рдПрдХреНрд╕ рдкрд░ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ <= 3.7.4 рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╕рдВрджрд░реНрдн рд╕реЗ рд╕реНрдореГрддрд┐ рдХреЛ рдареАрдХ рд╕реЗ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ
https://github.com/VeNoMouS/cloudscraper/issues/143#issuecomment -613092377
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдореБрджреНрджрд╛ред рдереНрд░реЗрдб рдореЗрдВ рдЪрд▓рддреЗ рд╕рдордп рдЕрдиреБрд░реЛрдз рд╕реНрдореГрддрд┐ рдЦрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб:
рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдореИрдВ рдПрдХ рд╕рддреНрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓
requests.get
рдЪрд▓рд╛рдиреЗ рдХреЗ рд╕рд╛рде рдмрджрд▓рддрд╛ рд╣реВрдВ рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИредрдЖрдЙрдЯрдкреБрдЯ рд╣реИ:
рдФрд░ рдкрд┐рдкрдлрд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: