рдореИрдВ рдПрдХ рдореВрд▓ рд▓реЛрдб рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреА рд╕реАрдорд╛рдУрдВ рдореЗрдВ рдЪрд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рд╕реА рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рджреЗрдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╛ рддреЛ рдореИрдВ рдЗрд╕реЗ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдбреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдЕрдиреБрд░реЛрдз рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рдХрд╣реАрдВ рд▓реАрдХ рдХрд░ рд░рд╣рд╛ рд╣реИ (рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛) рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБ рдХрд┐ рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рдХреЛ рдЖрдЦрд┐рд░ рдХреНрдпреЛрдВ рдЫреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛)
рдЬрд╣рд╛рдБ рдЖрдк requests.async
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рдирд╣реАрдВ, рд╕рднреА рдЕрдиреБрд░реЛрдз рдпрдереЛрдЪрд┐рдд рд╕рд╛рджреЗ рдЕрдиреБрд░реЛрдз рдереЗ
$ lsof | grep localhost | wc -l
110
рд╕рднреА рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ 4/5 рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╣реИрдВ
Python 82117 daleharvey 123u IPv4 0xffffff800da304e0 0t0 TCP localhost:61488->localhost:http (CLOSE_WAIT)
рдореИрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЪрдХрд┐рдд рд╣реВрдБ, рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред
рдЕрдЧрд░ рдореИрдВ рдмреАрдорд╛рд░ рдирд╣реАрдВ рд╣реВрдБ рддреЛ Hah рдмреАрдорд╛рд░ рдЗрд╕реЗ рдордЬрд╝рдмреВрддреА рд╕реЗ рджреЛрдмрд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╢реЙрдЯ рд▓реЗрддреЗ рд╣реИрдВ
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реЛрддреЗ рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрдм рдЬрдм рдореИрдВ async рдореЙрдбреНрдпреВрд▓ w / 200+ рдПрдХ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рдирдорд╕реНрддреЗ,
рдореБрдЭреЗ рдЕрдиреБрд░реЛрдз рдФрд░ рдЬреЗрдВрдЯ рдХреЗ рд╕рд╛рде рдмрдВрджрд░ рдкреИрдЪрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╕реНрдпрд╛ рдереА: CLOSE_WAIT рдореЗрдВ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдХрдиреЗрдХреНрд╢рдиред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рдпреЛрд╡реЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реЛред
рдпрд╣ ulimit -n рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдПрдХ рдЙрдЪреНрдЪ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
"рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЦреБрд▓реА рдлрд╛рдЗрд▓реЗрдВ" CLOSE_WAIT рдореЗрдВ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рдХрд╛рд░рдг рдмрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред
рддреЛ ulimit рд╕рд┐рд░реНрдл рдПрдХ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
@tamiel рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ?
рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХрд░реВрдБрдЧрд╛ рдФрд░ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред
рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд▓рдЧрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ:
рдореБрдЭреЗ рдХреЗрд╡рд▓ HTTP рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ async рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ - рдореИрдВ рдЕрднреА рднреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдПрдХ рдкреВрд▓ рдЖрдХрд╛рд░ рдХреЛ async.map рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рдЬрд▓реНрджреА рд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реБрдзрд╛рд░? рдпрд╣ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдиреБрдкрдпреЛрдЧреА рдмрдирд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕рдм CLOSE_WAIT
s рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдЕрднреА рднреА рдЦреБрд▓реЗ рдХреНрдпреЛрдВ рд╣реИрдВред
рдпрд╣ рдПрдХ urllib3 рдореБрджреНрджрд╛ рд╣реИ? рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдЗрди рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдореБрджреНрджреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рд╣рдо рдпрд╣рд╛рдВ рдмрд╛рддрдЪреАрдд рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдареАрдХ рд╣реИ, рдмрд╕ рдЖрдкрдХреЛ рдПрдХ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░рд┐рдлрд╝реНрд▓реЗрдкреНрд╕ 2 рд╕реЗ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдкрд░ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЗрд╕ рдорд╕рд▓реЗ рдХреЛ рд╕рд┐рдкреНрд▓рд╛рдм 2 рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рддреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЧрдВрднреАрд░ рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред
рддреЛ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ? рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред
рд░рд┐рд╕рд╛рд╡ рдЖрдВрддрд░рд┐рдХ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд▓рдВрдмрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирдП рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдкрд░реАрдХреНрд╖рдг рдореЗрдВ acdha @ 730c0e2e2bef77968a86962f9d5f2bebba4d19ec рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрднреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрддреЛрд╖рдЬрдирдХ рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡реА рд╕реБрдзрд╛рд░ рд╣реИред
рдпрд╣ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдмрджрд▓рд╛рд╡ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕реЗ рдмрд╛рд╣рд░ рд╣реВрдВред
рдореИрдВ async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╣реА рдореБрджреНрджреЗ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИ - рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдордВрдерди рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ / рдХреЙрд▓рд┐рдВрдЧ рд╣рдЯрд╛рдиреЗ рдЖрджрд┐ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╣рд▓ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореИрдВ рдЖрдЬ рдПрдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдХреЗрд╡рд▓ 5 рдХрдиреЗрдХреНрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ 60 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд░реБрдХрд╛ рд╣реБрдЖ рд╣реЛ, async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВ рдХреЗрд╡рд▓ 4 рдЪреАрдЬреЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрд╛ред
рдЦрдкрдд рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп GET рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВ 40 рд╕реЗрдХрдВрдб рдХреЗ рднреАрддрд░ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 150 рдЪреАрдЬреЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рдерд╛ред
рдЬрдм рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрд╛ рд╣реИ рддрдм рд╕реЗ рдореЗрд░реА рдХреАрдЪрдбрд╝ рдирд╣реАрдВ рдмрдирд╛ рд╣реИред
рдмрд╕ ipython рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рдФрд░ рдпрд╣ рд╕рдВрджреЗрд╢ рдорд┐рд▓рд╛ред рдпрд╣ рдмрд╕ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдорд┐рд▓рд╛ред
ERROR: Internal Python error in the inspect module.
Below is the traceback from this internal error.
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/IPython/core/ultratb.py", line 756, in structured_traceback
File "/Library/Python/2.7/site-packages/IPython/core/ultratb.py", line 242, in _fixed_getinnerframes
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 1035, in getinnerframes
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 995, in getframeinfo
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 456, in getsourcefile
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 485, in getmodule
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 469, in getabsfile
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py", line 347, in abspath
OSError: [Errno 24] Too many open files
Unfortunately, your original traceback can not be constructed.
рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд░реНрдл рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдпрдерди рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдореБрдЭреЗ "рдореИрдХреНрд╕ рд░рд┐рдЯреНрд░реАрдЬрд╝ рдПрд░рд░" рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рд╕рднреА рд╕рдорд╛рди рдбреЛрдореЗрди рдкрд░ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдореЗрд░реЗ рдкрд╛рд╕ allow_redirects True рдерд╛; рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдбрд╛рдпрд░реЗрдХреНрд╢рди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реАрдХ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдкреНрд░реАрдлрд╝реЗрдЪ = рдЯреНрд░реВ рдХреЗ рд╕рд╛рде рднреА рд░рд┐рд▓реАрдЬрд╝ рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред рдпрд╣ рдореЗрд░реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рддрдп рдХрд┐рдпрд╛:
[i.raw.release_conn() for i in resp.history]
resp.raw.release_conn()
рд╣рдореНрдордо редред
@acdha рд╕реЗрдЯрд┐рдВрдЧ:
requests.defaults.defaults['allow_redirects'] = False
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдХреЛрдИ рднреА рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВ рдЕрднреА рднреА рдЙрд╕реА рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЬреЛ рднреА рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди = / рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
@dalanmiller рдЖрдк рдЕрдкрдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдореИрдВ рдкрд╣рд▓реЗ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реБрдХ рдХреЗ рд╕рд╛рде async.map
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдпрд╣ async.imap
рд╕реЗ рдЕрдзрд┐рдХ рд╕рд░рд▓ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рд╣реЛрдирд╛ рдерд╛ред
for resp in requests.async.imap(reqs, size=8):
try:
print resp.status_code, resp.url
finally:
[i.raw.release_conn() for i in resp.history]
resp.raw.release_conn()
@ рдЖрдХрдж
рдореИрдВ рдмрд╕ рдПрдХ рдпреВрдЖрд░рдПрд▓ рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЕрдкрдиреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рд╛рде рдПрдХ request.get рдХрд░ рд░рд╣рд╛ рдерд╛ред
for u in urls:
response_list.append(requests.get(u))
рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдкреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рдореЗрд░реА 900 рд▓рдВрдмрд╛рдИ рдХреА рд╕реВрдЪреА рдореЗрдВ рд▓рдЧрднрдЧ 50 рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдореБрдЭреЗ рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП "url рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХрддрдо рд░рд┐рдЯреНрд░рд┐рдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░рдирд╛" рд╢реБрд░реВ рди рд╣реЛ рдЬрд╛рдПред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд╣реА рдбреЛрдореЗрди рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд╣реАрдВ?
рдЕрд░реЗ, рдореИрдВ 35k url рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕реВрдЪреА рдХреЛ рдХреНрд░реЙрд▓ рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ _some_ рдкрд░ рдпрд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред
рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ 10 рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдкреЗрд╢рд╛рдм рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ:
responses = requests.async.map([requests.async.get(u, params=self.params()) for u in chunk]) # chunk is a list of 10
рдХрд╣реАрдВ 20k рд░реЗрдВрдЬ рдореЗрдВ рдореБрдЭреЗ 24 рддреНрд░реБрдЯрд┐ рдорд┐рд▓рдиреА рд╢реБрд░реВ рд╣реЛ рдЧрдИ, рддреЛ рдпрд╣ рдареАрдХ 30k рдФрд░ рдлрд┐рд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛ рдЧрдИред
рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЖрдк рдЗрд╕реЗ рдиреАрдЪреЗ рд╕рдВрдХреАрд░реНрдг рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛрдЧреА?
requests.async
рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк grequests рдкрд░ рдЬрд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдм рдареАрдХ рд╣реИ, рдзрдиреНрдпрд╡рд╛рджред рдбреЙрдХреНрд╕ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд░рд╣реЗрдЧрд╛ред
рдПрдХ рдиреЛрдм рдХреА рддрд░рд╣ рдЬрдм рдпрд╣ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рд▓реЗрдЦрди рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдПрдХ рдЫреБрд░рд╛ рд▓рд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рднреЗрдЬрд╛ред рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ рдпрд╛ рдЖрд▓реЛрдЪрдирд╛ рдХрд░реЗрдВ :)
рдареАрдХ рд╣реИ, рдпрд╣ 6k рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдмрд╛рдж, рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде, async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рднреА рдЦреБрд╢ рд╣реИред
рдореБрдЭреЗ рдЙрд╕ рдкрд░ рд╢рдХ рд╣реБрдЖред
рдореЗрд░реЗ рд▓рд┐рдП 'рдмрд╣реБрдд рдЦреБрд▓реА рд╣реБрдИ рдлрд╛рдЗрд▓реЗрдВ' рддреНрд░реБрдЯрд┐ 1k рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реБрдИред рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣ рдерд╛ рдХрд┐ рдЬреАрд╡рд┐рдд-рдЬреАрд╡рд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП, рдХрднреА рднреА рдЪрдВрдХреНрд╕ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП ( lsof -p PID | wc -l
рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдХрдиреЗрдХреНрд╢рди рдХреА рдЧреИрд░-рдмрдврд╝рддреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
rsess = requests.session()
rsess.config['keep-alive'] = False
rs = [grequests.get(l, session=rsess) for l in links]
for s in chunks(rs,100):
responses = grequests.map(s, size=concurrency)
for r in responses:
try:
print(r.status_code, r.url)
finally:
r.raw.release_conn()
[рез] рдЪреМрдХрд╛ рд▓рдЧрд╛рдирд╛: http://stackoverflow.com/a/312464
Urllib3 рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╕рдордп рдмрдВрдж рдХрд░рдирд╛ред
@kennethreitz urllib3 рдХреА рдЕрдВрдХ рд╕рдВрдЦреНрдпрд╛ рдХреНрдпрд╛ рд╣реИ?
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╣реИ http://bugs.python.org/issue16298
@silvexis рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ urllib3 рдмрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдм рдореИрдВ рдЪрд╛рд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ @ piotr-dobrogost: P рдХрд╛ рдЬрд╡рд╛рдм рджреЗред
рдХреНрдпрд╛ рдЕрдм рднреА рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ?
рдореИрдВрдиреЗ рдЗрд╕рдХреА рдХреЛрдИ рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рд╕реБрдиреА рд╣реИред рд╣реЗ рдирд╛ рддреВ?
рдпрд╣ рдмреЙрдХреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдирд╣реАрдВред рдЕрдкрдиреЗ OS рдХреЗ рдХрд░реНрдиреЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рджреЗрдЦреЗрдВред рдмреАрдПрд╕рдбреА рдореЗрдВ рдЗрд╕реЗ kern.maxfiles
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓рдЧрднрдЧ ulimit
рдХрд╛ рдзрд╛рдЧрд╛ рд╣реИ: http://stackoverflow.com/questions/34588/how-do-i-change-the-number-of-open-files-limit-in-linux
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИред
рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рдХрд┐ рд╣рдо рдЕрднреА рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди, рднрдпрд╛рдирдХ, рдХреЛрдб рд╣реИрдВ:
if self._current_response is not None:
# Requests doesn't have a clean API to actually close the
# socket properly. Dig through multiple levels of private APIs
# to close the socket ourselves. Icky.
self._current_response.raw.release_conn()
if self._current_response.raw._fp.fp is not None:
sock = self._current_response.raw._fp.fp._sock
try:
logger.debug('Forcibly closing socket')
sock.shutdown(socket.SHUT_RDWR)
sock.close()
except socket.error:
pass
(рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ self._current_response рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╕реНрддреБ рд╣реИ)
рд╣рдореНрдо, рдмрдВрдж рд╣реЛрдиреЗ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╣рд╛рдБ рдЯреВрдЯреА рд╣реБрдИ рд╣реИ? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Response.close()
рдкрджреНрдзрддрд┐ рд╣реИ, рдЬреЛ release_conn()
рдХреЙрд▓ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП release_conn()
рд╣реЛрдиреЗ рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
@ рд▓реБрдХрд╛рд╕рд╛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ urllib3 рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЪрд░реНрдЪрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛ред рдЕрдкрдиреЗ рдЕрдиреБрдорд╛рди рдореЗрдВ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реЛрдиреЗ рдХреЗ рдкреНрд░рддрд┐ рдЭреБрдХрд╛рд╡ рдХреЗ рд╕рд╛рде, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдЕрдиреБрд░реЛрдз 1.2.x рдХреЗ рдмрд╛рдж рд╕реЗ рд╣реИ рдЕрдЧрд░ 1.1.x рдирд╣реАрдВред
рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддрдп рд╣реЛ рдЧрдпрд╛ рдерд╛ред рдЬрдм рддрдХ рд╣рдо 1.2.3 рдкрд░ рдХреБрдЫ рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рдореИрдВ рдпрд╣ рддрдп рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ред
рдореИрдВ 2.0.2 рдХреЗ рд╕рд╛рде CLOSE_WAIT рд▓реАрдХ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдХрд┐ рд╡рд┐рд╖рдп рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдЧрдорди рдирд╣реАрдВ рд╣реИ?
рдирд╣реАрдВ, рд╣рдо рдирд╣реАрдВред AFAIK urllib3 рдпрд╛ рддреЛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ рд░рд┐рд╕рд╛рд╡ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рд╣рдо рд╕реЛрдорд╡рд╛рд░ рд╕реЗ рд╣рдорд╛рд░реЗ рдЖрдВрддрд░рд┐рдХ рдРрдк рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдЬ 1024 рдЕрдзрд┐рдХрддрдордлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВред
рд░рд┐рдмреВрдЯ рдХреЗ 2 рдШрдВрдЯреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 40 CLOSE_WAIT рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ lsof рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рджреЗрд╡ рдорд╛рд╣реМрд▓ рдореЗрдВ рдкреНрд░рдЬрдирди рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рд╣рд╛рдВред рдЖрдк рд╕реЗ рд╕рдВрдкрд░реНрдХ рдмрдирд╛ рд░рд╣реЗрдЧрд╛
@tardyp рднреА, рдЖрдкрдиреЗ рдЕрдиреБрд░реЛрдз рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА OS рдкреИрдХреЗрдЬ рдореЗрдВрдЯреЗрдирд░реНрд╕ urllib3 рдХреЛ рд╕реНрдЯреНрд░рд┐рдк рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╡реЗ рдЕрдк-рдЯреВ-рдбреЗрдЯ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдПрдХ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред
рдореИрдВрдиреЗ рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдЬрдЧрд░ 2.6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП python2.7 рдкрд░ рдлрд┐рдХреНрд╕ рджреЗрдЦрд╛ рд╣реИ
рдпрд╣ рдмрдЧред рдХреНрдпрд╛ рдЖрдк рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдордВрдХреАрдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ?
рдкрд┐рдпрд░реЗ
рд╢реБрдХреНрд░ рдкрд░, 29 рдирд╡рдВрдмрд░, 2013 рдХреЛ рд╢рд╛рдо 5:33 рдмрдЬреЗ, рдЗрдпрд╛рди рдХреЙрд░реНрдбреИрд╕реНрдХреЛ рд╕реВрдЪрдирд╛рдПрдВ @github.comwrote:
@tardyp https://github.com/tardyp рднреА, рдЖрдкрдиреЗ рдЕрдиреБрд░реЛрдз рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛? рдореИрдВ
рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА OS рдкреИрдХреЗрдЬ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдиреЗ urllib3 рдХреЛ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рд╡реЗ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ
рдЙрд╕ рдЕрдк-рдЯреВ-рдбреЗрдЯ рд░рдЦреЗрдВ рдФрд░ рдЖрдк рдПрдХ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрд╛рд░рдгред рдпрджрд┐ рдЖрдк рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдмреЗрдЭрд┐рдЭрдХ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВ
рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░реЗрдВред-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ Gi tHubhttps рдкрд░
ред
@tardyp рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдЙрддрдиреЗ рд╡рд┐рд╡рд░рдг рд╕рд╣рд┐рдд рдЦреЛрд▓реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЖрдк рдЬрд┐рдпреЛрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рднреА рд╡рд┐рд╡рд░рдг рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╢рд╛рдирджрд╛рд░ рд╣реЛрдЧрд╛ред
FYI рдХрд░реЗрдВ https://github.com/shazow/urllib3/issues/291 рдмрдЧ рдХреЗ рдХрд╛рд░рдг рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдореБрдЭреЗ рднреА рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ!
@polvoazul рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ рдпрд╣ рд╡рд╣реА рдореБрджреНрджрд╛ рд╣реИ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ 2011 рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рд╕рд╣реА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд░рд┐рд▓реАрдЬрд╝ (2.4.3) рдХреЛ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рдирд╛ рд╕рд╣реА рд╣реЛрдЧрд╛ред
@Lukasa рдореБрдЭреЗ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ
рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ @mygoda , рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдПрдХ рд╕рдордп рдореЗрдВ рдмрдХрд╛рдпрд╛ рд╣реЛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдореА рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкреБрдирд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд╕рдорд╕реНрдпрд╛ рд╣реИред
@Lukasa рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж my рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдореБрджреНрджрд╛ рдЗрд╕ you рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реИ, рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛
рдЕрдм рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, 120 рдзрд╛рдЧреЗ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ, 100000+ рдЦреЛрд▓реА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдХрд╛рд░рдг рд╣реИ, рдЕрднреА рдХреЛрдИ рд╕рдорд╛рдзрд╛рди?
@mygoda рдЖрдк рдХрдорд╛рд▓ рдХреЗ рдкреАрд░рд┐рдпрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ use
@ 1a1a11a _What_ рдлрд╛рдЗрд▓реЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИрдВ? рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧреА рдкрд╣рд▓рд╛ рдХрджрдо рд╣реЛрдЧрд╛ред
@ 1a1a11a рдЖрдк рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдЕрдЬрдЧрд░ рдХрд╛ рдХреНрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг? рдХреНрдпрд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо? рдХреНрдпрд╛ рд╣рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИ?
рдореИрдВ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ 2.9.1, рдЕрдЬрдЧрд░ 3.4, ubuntu 14.04, рдореВрд▓ рд░реВрдк рд╕реЗ рдореИрдВ рдХреБрдЫ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ 30 рдзрд╛рдЧреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХреНрд░реЙрд▓рд░ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВрдиреЗ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕реАрдорд╛ рдкреНрд░рддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ 655350 рдкрд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛ред
рдореБрдЭреЗ рдЕрднреА рднреА "рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓" рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд░рд╣реА рд╣реИ: [Errno 24] рдмрд╣реБрдд рд╕рд╛рд░реА рдЦреБрд▓реА рдлрд╛рдЗрд▓реЗрдВ "request.packages.urllib3.connection.VerifiedHTTPSConnection рд╕реЗред" рдореИрдВ Pyth 3.4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, 2.11.1 рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ-рд╡рд╛рдпрджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред 0.9.7ред рдореИрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ-рд╡рд╛рдпрджрд╛ рдПрдХ рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рдЖ рд░рд╣реА рд╣реИред рдореИрдВ SSL рдкрд░ 180k рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ 1000 рдХреЗ рдЦрдВрдбреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВред рднрд╡рд┐рд╖реНрдп рдХреА рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╣рд▓ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдЕрдЧрд▓реЗ 1000 рдкрд░ рдЬрд╛рдПрдВред рдореИрдВ Ubuntu 16.04.2 рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реАрдорд╛ 1024 рд╣реИред рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░рдг рдХреЛ рд╕рдордЭрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓? рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдХреНрдпреЛрдВ? рдпрд╣ рдПрдХ рдПрд╕рдПрд╕рдПрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдлрд╝рд╛рдЗрд▓ рд╣реИ? рдФрд░ рдХреНрдпрд╛ рдЕрдиреБрд░реЛрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп рднрд╡рд┐рд╖реНрдп рдХреА рд╡рд╕реНрддреБ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрди рдЦреБрд▓реА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ?
рдЕрдиреБрд░реЛрдз рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рдЦреЛрд▓рддрд╛ рд╣реИред рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ OpenSSL рджреНрд╡рд╛рд░рд╛ рдЦреЛрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдмрдирд╛рдП рдирд╣реАрдВ рд░рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЕрдиреБрд░реЛрдз рднреА рдЦреБрд▓реЗрдЧрд╛, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ .netrc
рдлрд╝рд╛рдЗрд▓, рд╣реЛрд╕реНрдЯреНрд╕ рдлрд╝рд╛рдЗрд▓, рдФрд░ рдХрдИ рдЕрдиреНрдпред
рдЖрдкрдХреЛ strace
рдЬреИрд╕реЗ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдХрд┐ рдлрд╛рдЗрд▓реЗрдВ рдЦреЛрд▓рддреЗ рд╣реИрдВред рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреА рдПрдХ рд╕рдЦреНрдд рд╕реВрдЪреА рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рддреЗрдЬреА рд╕реЗ рдЗрдирдХреА рдЧрдгрдирд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдпрд╣ рднреА рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд▓реЗрдХрд┐рди, рд╣рд╛рдБ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ HTTPS рдкрд░ 1000 рдХрдиреЗрдХреНрд╢рди
рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде рднреА рд╕рдВрдШрд░реНрд╖ рдХрд┐рдпрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ OS X рдкрд░ opensnoop
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рднреА рд╕рдорд╛рди рдореБрджреНрджреЛрдВ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдореИрдВ рднреА рдмрд╛рд░-рдмрд╛рд░ requests.post(url, data=data)
рд╕реЗ HTTP
(рди рдХрд┐ HTTPS) рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдХреНрд╕рд░ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБред Ubuntu 16.04.3, рдкрд╛рдпрдерди 3.5.2 рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, 2.9.1 рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ
data
рдХреНрдпрд╛ рд╣реИ?
рдХреБрдЫ рд╕реМ рдХреЗрдмреА рдкрд╛рда
рдлрд╝рд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ?
рдирд╣реАрдВ, рдореИрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдХреНрд╡реЗрд░реА рдмрдирд╛рддрд╛ рд╣реВрдВред
рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдХрдИ рдереНрд░реЗрдб рдореЗрдВ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ?
рдирд╣реАрдВ, рдПрдХрд▓ рдзрд╛рдЧрд╛, рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯрд┐рдВрдЧ
рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдПрдлрдбреА рдХреЛ рд▓реАрдХ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИ: рд╣рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдПрдХ рд╣реА рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЖрдХреНрд░рд╛рдордХ рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рд╕рд░реНрд╡рд░ рдХреНрдпрд╛ рд╣реИ?
рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдкрд╛рдпрдерди 2.7, рдЕрдиреБрд░реЛрдз 2.18.4, urllib3 1.22ред
рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдХреЛрдб (рдмрд╣реБ-рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ) рдЪрд▓рд╛рдирд╛ред рдПрдХ рд╕рдордп рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ 6 URL рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рддреНрд░ рдмрдирд╛рдирд╛ рдФрд░ рдмрдВрдж рдХрд░рдирд╛ред
рдореБрдЭреЗ Python 3.5
, requests==2.18.4
рдкрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ
@mcobzarenco рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдЖрдк (рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд) рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдиреЗрдХреНрд╢рди рдХреЛ рдмрдВрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдмрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрдврд╝рддреЗ рд╕рдордпред рдбреЗрдЯрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╕реЙрдХреЗрдЯ CLOSE_WAIT рдореЗрдВ рдирд╣реАрдВ рд░рд╣реЗрдЧрд╛ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
"рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЦреБрд▓реА рдлрд╛рдЗрд▓реЗрдВ" CLOSE_WAIT рдореЗрдВ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рдХрд╛рд░рдг рдмрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред
рддреЛ ulimit рд╕рд┐рд░реНрдл рдПрдХ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред