<p>рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдмрдбрд╝реА рдмрд╛рдЗрдирд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ</p>

рдХреЛ рдирд┐рд░реНрдорд┐рдд 5 рджрд┐рд╕ре░ 2014  ┬╖  40рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: psf/requests

https://github.com/alex/http-client-bench рдореЗрдВ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:

| | рдЕрдиреБрд░реЛрдз/http | рд╕реЙрдХреЗрдЯ |
| --- | --- | --- |
| рд╕реАрдкреАрдереЙрди | 12рдПрдордмреА/рдПрд╕ | 200рдПрдордмреА/рдПрд╕ |
| рдкреАрдкреАрдкреА | 80рдПрдордмреА/рдПрд╕ | 300рдПрдордмреА/рдПрд╕ |
| рдЬрд╛рдУ | 150рдПрдордмреА/рдПрд╕ | рдПрди/рдП |

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реАрдкреАрдереЙрди рдкрд░ рд╕реЙрдХреЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд╛рдлреА рдЕрдзрд┐рдХ рдУрд╡рд░рд╣реЗрдб рд▓рдЧрд╛рддрд╛ рд╣реИред

рд╕рднреА 40 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╡рд╣ рдУрд╡рд░рд╣реЗрдб рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдмрдбрд╝рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рд╕реЗ рдмрдЪрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рддрд┐ рдЦрдВрдб рдХрд╛рдлреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдвреЗрд░ рдХреЗ рдиреАрдЪреЗ рд╣реИ: рдЕрдиреБрд░реЛрдз, urllib3 рдФрд░ httplibред рдпрд╣ рджреЗрдЦрдирд╛ рдмреЗрд╣рдж рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдХреНрд╖рдорддрд╛ рдХрд╛ рдХрд╛рд░рдг рдХреМрди рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХрд╣рд╛рдВ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВ рдХрд┐ рдЕрдЧрд▓рд╛ рдХрджрдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП httplib / urllib3 рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рд╡рд╣рд╛рдВ рдкреНрд░рджрд░реНрд╢рди?

рдХреЗрд╡рд┐рди рдмрд░реНрдХ
рдлреЛрди: 925.271.7005 | рдЯреНрд╡реЗрдВрдЯреАрдорд┐рд▓реАрд╕реЗрдХрдВрдбреНрд╕.рдХреЙрдо

рдЧреБрд░реБ, 4 рджрд┐рд╕рдВрдмрд░ 2014 рдХреЛ рд╢рд╛рдо 5:01 рдмрдЬреЗ, рдХреЛрд░реА рдмреЗрдирдлреАрд▓реНрдб рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рд╡рд╣ рдУрд╡рд░рд╣реЗрдб рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдмрдбрд╝рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рд╕реЗ рдмрдЪрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рддрд┐ рдЦрдВрдб рдХрд╛рдлреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВред рд╡рд╣ рд╣реИ
рдвреЗрд░ рдХреЗ рдиреАрдЪреЗ рд╕рднреА рддрд░рд╣ рд╕реЗ: рдЕрдиреБрд░реЛрдз, urllib3 рдФрд░ httplibред рдпрд╣ рд╣реЛрдЧрд╛
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдХреМрди рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░ рд░рд╣рд╛ рд╣реИ
рдЕрдХреНрд╖рдорддрд╛ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/kennethreitz/requests/issues/2371#issuecomment -65732050
.

urllib3 рдХреЗ рд╕рд╛рде рдмрд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛рдпрд╛:

рдкреАрдкреАрдкреА: 120 рдПрдордмреА / рдПрд╕
рд╕реАрдкреАрдереЙрди: 70MB/s

рдФрд░ рдореИрдВрдиреЗ CPython + рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛: 35MB/s

(рдореЗрд░реА рдорд╢реАрди рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╢реЛрд░ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣реА рд╣реИ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдПрдХ рд╢рд╛рдВрдд рдкреНрд░рдгрд╛рд▓реА рд╣реИ рддреЛ рд╡реЗ рдЗрди рдкрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛)

рдореИрдВрдиреЗ рд╣рд░ рджреВрд╕рд░реЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╢реЛрд░ рдорд┐рд▓рд╛ - the
рд╕реЙрдХреЗрдЯ рдмреЗрдВрдЪрдорд╛рд░реНрдХ 30mb/s рд╕реЗ 460mb/s рддрдХ рдХрд╣реАрдВ рднреА рдерд╛ред

рдХреЗрд╡рд┐рди рдмрд░реНрдХ
рдлреЛрди: 925.271.7005 | рдЯреНрд╡реЗрдВрдЯреАрдорд┐рд▓реАрд╕реЗрдХрдВрдбреНрд╕.рдХреЙрдо

рдЧреБрд░реБ, 4 рджрд┐рд╕рдВрдмрд░ 2014 рдХреЛ рд░рд╛рдд 9:24 рдмрдЬреЗ, рдПрд▓реЗрдХреНрд╕ рдЧреЗрдиреНрдиреЛрд░ рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

urllib3 рдХреЗ рд╕рд╛рде рдмрд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛рдпрд╛:

рдкреАрдкреАрдкреА: 120 рдПрдордмреА / рдПрд╕
рд╕реАрдкреАрдереЙрди: 70MB/s

рдФрд░ рдореИрдВрдиреЗ CPython + рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛: 35MB/s

(рдореЗрд░реА рдорд╢реАрди рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╢реЛрд░ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣реА рд╣реИ, рдЕрдЧрд░
рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдПрдХ рд╢рд╛рдВрдд рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡реЗ рдпреЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛)

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/kennethreitz/requests/issues/2371#issuecomment -65748982
.

рдореИрдВрдиреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛ рдЕрдм рдЪрд▓рд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдиреНрдп рд▓реЛрдЧ рдЙрдореНрдореАрдж рд╕реЗ рдореЗрд░реЗ рдирдВрдмрд░реЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рд╕реАрдкреАрдереЙрди:

BENCH SOCKET:
   8GiB 0:00:22 [ 360MiB/s] [======================================================>] 100%
BENCH HTTPLIB:
   8GiB 0:02:34 [53.1MiB/s] [======================================================>] 100%
BENCH URLLIB3:
   8GiB 0:01:30 [90.2MiB/s] [======================================================>] 100%
BENCH REQUESTS
   8GiB 0:01:30 [90.7MiB/s] [======================================================>] 100%
BENCH GO HTTP
   8GiB 0:00:26 [ 305MiB/s] [======================================================>] 100%

рдкреАрдкреАрдкреА:

BENCH SOCKET:
   8GiB 0:00:22 [ 357MiB/s] [======================================================>] 100%
BENCH HTTPLIB:
   8GiB 0:00:43 [ 189MiB/s] [======================================================>] 100%
BENCH URLLIB3:
   8GiB 0:01:07 [ 121MiB/s] [======================================================>] 100%
BENCH REQUESTS
   8GiB 0:01:09 [ 117MiB/s] [======================================================>] 100%
BENCH GO HTTP
   8GiB 0:00:26 [ 307MiB/s] [======================================================>] 100%

рдЙрд╣ ... рд╡реЗ рдирдВрдмрд░ рдЕрдЬреАрдм рд╣реИрдВред CPython рдХрд╛ httplib рдЕрдиреБрд░реЛрдз рдпрд╛ urllib3 рд╕реЗ рдзреАрдорд╛ рд╣реИ, рднрд▓реЗ рд╣реА рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп httplib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред

рд╡реЗ рдореЗрд░реЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ -- рдХреНрдпрд╛ рдЖрдк рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛
рдЖрдк рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЧрд▓рдд рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ
рдмреЗрдВрдЪрдорд╛рд░реНрдХ?

рд╢реБрдХреНрд░ рдкрд░ рджрд┐рд╕рдВрдмрд░ 05 2014 11:16:45 рдХреЛрд░реА Benfield рдкрд░ [email protected]
рд▓рд┐рдЦрд╛ рдерд╛:

рдЙрд╣ ... рд╡реЗ рдирдВрдмрд░ рдЕрдЬреАрдм рд╣реИрдВред CPython рдХрд╛ httplib рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛ рд╣реИ рдпрд╛
urllib3, рднрд▓реЗ рд╣реА рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп httplib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/kennethreitz/requests/issues/2371#issuecomment -65821989
.

рдореИрдВ рдЕрднреА рдПрдХ рдЬреНрдЮрд╛рдд-рд╢рд╛рдВрдд рдорд╢реАрди рдХреЛ рдкрдХрдбрд╝ рд░рд╣рд╛ рд╣реВрдБред рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдореЗрдВ рдХреБрдЫ рдорд┐рдирдЯ рд▓рдЧрдиреЗ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рднреМрддрд┐рдХ рдмреЙрдХреНрд╕ рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИ (рднрдЧрд╡рд╛рди рдореИрдВ MAAS рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдБ)ред

CPython 2.7.8

BENCH SOCKET:
   8GiB 0:00:26 [ 309MiB/s] [================================>] 100%
BENCH HTTPLIB:
   8GiB 0:02:24 [56.5MiB/s] [================================>] 100%
BENCH URLLIB3:
   8GiB 0:01:42 [79.7MiB/s] [================================>] 100%
BENCH REQUESTS
   8GiB 0:01:45 [77.9MiB/s] [================================>] 100%
BENCH GO HTTP
   8GiB 0:00:27 [ 297MiB/s] [================================>] 100%

рд╣рд╛рдВрд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреА рдХреАрдордд рдХреЗ рдмрд╛рд░реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБ:

рдпрд╣ рдкреИрдЪ , CPython 3.4.2 :

BENCH SOCKET:
   8GiB 0:00:27 [ 302MiB/s] [================================>] 100%
BENCH HTTPLIB:
   8GiB 0:00:53 [ 151MiB/s] [================================>] 100%
BENCH URLLIB3:
   8GiB 0:00:54 [ 149MiB/s] [================================>] 100%
BENCH REQUESTS
   8GiB 0:00:56 [ 144MiB/s] [================================>] 100%
BENCH GO HTTP
   8GiB 0:00:31 [ 256MiB/s] [================================>] 100%

рдЖрдкрдХреЛ Python2 рдкрд░ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
env PYTHONUNBUFFERED= рдпрд╛ -u рдЭрдВрдбрд╛ред

рд╢реБрдХреНрд░рд╡рд╛рд░ 05 рджрд┐рд╕рдВрдмрд░ 2014 рдХреЛ 11:42:36 рдкреВрд░реНрд╡рд╛рд╣реНрди рдкрд░ рдХреЛрд░реА рдлрд╝рд╛рд░рд╡реЗрд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рд╣рд╛рдВрд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреА рдХреАрдордд рдХреЗ рдмрд╛рд░реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБ:

рдпрд╣ рдкреИрдЪ https://gist.github.com/frewsxcv/1c0f3c81cda508e1bca9 , CPython
3.4.2:

рдмреЗрдВрдЪ рд╕реЙрдХреЗрдЯ:
8GiB 0:00:27 [ 302MiB/s] [============================>] 100%
рдмреЗрдВрдЪ HTTPLIB:
8GiB 0:00:53 [151MiB/s] [============================>] 100%
рдмреЗрдВрдЪ URLLIB3:
8GiB 0:00:54 [ 149MiB/s] [============================>] 100%
рдмреЗрдВрдЪ рдЕрдиреБрд░реЛрдз
8GiB 0:00:56 [ 144MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ рдЬрд╛рдУ HTTP
8GiB 0:00:31 [ 256MiB/s] [===========================>] 100%

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/kennethreitz/requests/issues/2371#issuecomment -65826239
.

@alex рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рди рддреЛ env PYTHONUNBUFFERED= рдпрд╛ -u рдХрд╛ Python 2 рдкрд░ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рд╣реИред рдореЗрд░реА рдорд╢реАрди рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рдгрд╛рдоред

рдареАрдХ рд╣реИ, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдПрдХ рдРрд╕реА рдорд╢реАрди рд╕реЗ рдЖрддрд╛ рд╣реИ рдЬреЛ рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИред рдЕрдВрддрд┐рдо рдкрд░реАрдХреНрд╖рдг рдкрд╛рдпрдерди -u рдзреНрд╡рдЬ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдзреНрд╡рдЬ рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИред

Python 2.7.6
go version go1.2.1 linux/amd64
BENCH SOCKET:
   8GiB 0:00:16 [ 500MiB/s] [================================>] 100%
BENCH HTTPLIB:
   8GiB 0:01:32 [88.6MiB/s] [================================>] 100%
BENCH URLLIB3:
   8GiB 0:01:20 [ 101MiB/s] [================================>] 100%
BENCH REQUESTS
   8GiB 0:01:21 [ 100MiB/s] [================================>] 100%
BENCH GO HTTP
   8GiB 0:00:21 [ 385MiB/s] [================================>] 100%
Python 2.7.6
go version go1.2.1 linux/amd64
BENCH SOCKET:
   8GiB 0:00:16 [ 503MiB/s] [================================>] 100%
BENCH HTTPLIB:
   8GiB 0:01:33 [87.8MiB/s] [================================>] 100%
BENCH URLLIB3:
   8GiB 0:01:20 [ 101MiB/s] [================================>] 100%
BENCH REQUESTS
   8GiB 0:01:22 [99.3MiB/s] [================================>] 100%
BENCH GO HTTP
   8GiB 0:00:20 [ 391MiB/s] [================================>] 100%
Python 2.7.6
go version go1.2.1 linux/amd64
BENCH SOCKET:
   8GiB 0:00:16 [ 506MiB/s] [================================>] 100%
BENCH HTTPLIB:
   8GiB 0:01:31 [89.1MiB/s] [================================>] 100%
BENCH URLLIB3:
   8GiB 0:01:20 [ 101MiB/s] [================================>] 100%
BENCH REQUESTS
   8GiB 0:01:20 [ 101MiB/s] [================================>] 100%
BENCH GO HTTP
   8GiB 0:00:21 [ 389MiB/s] [================================>] 100%

рдпреЗ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдЕрддреНрдпрдВрдд рд╕реНрдерд┐рд░ рд╣реИрдВ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рджрд░реНрд╢рд╛рддреА рд╣реИрдВ:

  1. рд░реЙ рд╕реЙрдХреЗрдЯ рд░реАрдб рдлрд╛рд╕реНрдЯ (рдбреБрд╣) рд╣реИрдВред
  2. рдЧреЛ рдПрдХ рд░реЙ рд╕реЙрдХреЗрдЯ рд░реАрдб рдХреА рдЧрддрд┐ рдХрд╛ рд▓рдЧрднрдЧ 80% рд╣реИред
  3. urllib3 рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдкрдврд╝рдиреЗ рдХреА рдЧрддрд┐ рдХрд╛ рд▓рдЧрднрдЧ 20% рд╣реИред
  4. рдЕрдиреБрд░реЛрдз urllib3 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реИ, рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
  5. httplib рдЕрдиреБрд░реЛрдз/urllib3 рд╕реЗ рдзреАрдорд╛ рд╣реИред рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ httplib рдпрд╛ рд╕реЙрдХреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ httplib рдирд╣реАрдВ рд╣реИред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореИрдВрдиреЗ рдЕрднреА @kevinburke рд╕реЗ buffering=True рдЬреЛрдбрд╝рдХрд░ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рд╣реИ, рдЕрдкрдиреЗ рд░рди рдХрд░реЗрдВ
рдЙрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ?

рд╢реБрдХреНрд░рд╡рд╛рд░ 05 рджрд┐рд╕рдВрдмрд░ 2014 рдХреЛ рджреЛрдкрд╣рд░ 12:04:40 рдмрдЬреЗ рдХреЛрд░реА рдмреЗрдирдлреАрд▓реНрдб рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдареАрдХ рд╣реИ, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдЙрд╕ рдорд╢реАрди рд╕реЗ рдЖрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ
рд▓реЗрдХрд┐рди рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рдкрд░реАрдХреНрд╖рдг рдкрд╛рдпрдерди -рдпреВ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
рд╕реЗрдЯ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдзреНрд╡рдЬ рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИред

рдкрд╛рдпрдерди 2.7.6
рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг go1.2.1 linux/amd64
рдмреЗрдВрдЪ рд╕реЙрдХреЗрдЯ:
8GiB 0:00:16 [500MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ HTTPLIB:
8GiB 0:01:32 [88.6MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ URLLIB3:
8GiB 0:01:20 [ 101MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ рдЕрдиреБрд░реЛрдз
8GiB 0:01:21 [ 100MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ рдЬрд╛рдУ HTTP
8GiB 0:00:21 [385MiB/s] [============================>] 100%

рдкрд╛рдпрдерди 2.7.6
рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг go1.2.1 linux/amd64
рдмреЗрдВрдЪ рд╕реЙрдХреЗрдЯ:
8GiB 0:00:16 [ 503MiB/s] [============================>] 100%
рдмреЗрдВрдЪ HTTPLIB:
8GiB 0:01:33 [87.8MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ URLLIB3:
8GiB 0:01:20 [ 101MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ рдЕрдиреБрд░реЛрдз
8GiB 0:01:22 [99.3MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ рдЬрд╛рдУ HTTP
8GiB 0:00:20 [ 391MiB/s] [===========================>] 100%

рдкрд╛рдпрдерди 2.7.6
рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг go1.2.1 linux/amd64
рдмреЗрдВрдЪ рд╕реЙрдХреЗрдЯ:
8GiB 0:00:16 [ 506MiB/s] [============================>] 100%
рдмреЗрдВрдЪ HTTPLIB:
8GiB 0:01:31 [89.1MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ URLLIB3:
8GiB 0:01:20 [ 101MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ рдЕрдиреБрд░реЛрдз
8GiB 0:01:20 [ 101MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ рдЬрд╛рдУ HTTP
8GiB 0:00:21 [ 389MiB/s] [============================>] 100%

рдпреЗ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдЕрддреНрдпрдВрдд рд╕реНрдерд┐рд░ рд╣реИрдВ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рджрд░реНрд╢рд╛рддреА рд╣реИрдВ:

  1. рд░реЙ рд╕реЙрдХреЗрдЯ рд░реАрдб рдлрд╛рд╕реНрдЯ (рдбреБрд╣) рд╣реИрдВред
  2. рдЧреЛ рдПрдХ рд░реЙ рд╕реЙрдХреЗрдЯ рд░реАрдб рдХреА рдЧрддрд┐ рдХрд╛ рд▓рдЧрднрдЧ 80% рд╣реИред
  3. urllib3 рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдкрдврд╝рдиреЗ рдХреА рдЧрддрд┐ рдХрд╛ рд▓рдЧрднрдЧ 20% рд╣реИред
  4. рдЕрдиреБрд░реЛрдз urllib3 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реИ, рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣рдо
    рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдЬреЛрдбрд╝реЗрдВред
  5. httplib рдЕрдиреБрд░реЛрдз/urllib3 рд╕реЗ рдзреАрдорд╛ рд╣реИред рдмрд╕ рдЕрд╕рдВрднрд╡ рд╣реИ,
    рдФрд░ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ httplib рдпрд╛ рд╕реЙрдХреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
    рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ httplib рдирд╣реАрдВ рд╣реИред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/kennethreitz/requests/issues/2371#issuecomment -65829335
.

рдХреЛрд░реА - рдмреЗрдВрдЪ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦреЗрдВ рдЬреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИ
рдмрдлрд░рд┐рдВрдЧ = httplib рдореЗрдВ рд╕рдЪ (рдЕрдиреБрд░реЛрдз/urllib3 рдХреЗ рд░реВрдк рдореЗрдВ)

рдХреЗрд╡рд┐рди рдмрд░реНрдХ
рдлреЛрди: 925.271.7005 | рдЯреНрд╡реЗрдВрдЯреАрдорд┐рд▓реАрд╕реЗрдХрдВрдбреНрд╕.рдХреЙрдо

рд╢реБрдХреНрд░, 5 рджрд┐рд╕рдВрдмрд░ 2014 рдХреЛ рд╕реБрдмрд╣ 10:04 рдмрдЬреЗ, рдХреЛрд░реА рдмреЗрдирдлреАрд▓реНрдб рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдареАрдХ рд╣реИ, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдЙрд╕ рдорд╢реАрди рд╕реЗ рдЖрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ
рд▓реЗрдХрд┐рди рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рдкрд░реАрдХреНрд╖рдг рдкрд╛рдпрдерди -рдпреВ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
рд╕реЗрдЯ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдзреНрд╡рдЬ рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИред

рдкрд╛рдпрдерди 2.7.6
рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг go1.2.1 linux/amd64
рдмреЗрдВрдЪ рд╕реЙрдХреЗрдЯ:
8GiB 0:00:16 [500MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ HTTPLIB:
8GiB 0:01:32 [88.6MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ URLLIB3:
8GiB 0:01:20 [ 101MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ рдЕрдиреБрд░реЛрдз
8GiB 0:01:21 [ 100MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ рдЬрд╛рдУ HTTP
8GiB 0:00:21 [385MiB/s] [============================>] 100%

рдкрд╛рдпрдерди 2.7.6
рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг go1.2.1 linux/amd64
рдмреЗрдВрдЪ рд╕реЙрдХреЗрдЯ:
8GiB 0:00:16 [ 503MiB/s] [============================>] 100%
рдмреЗрдВрдЪ HTTPLIB:
8GiB 0:01:33 [87.8MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ URLLIB3:
8GiB 0:01:20 [ 101MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ рдЕрдиреБрд░реЛрдз
8GiB 0:01:22 [99.3MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ рдЬрд╛рдУ HTTP
8GiB 0:00:20 [ 391MiB/s] [===========================>] 100%

рдкрд╛рдпрдерди 2.7.6
рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг go1.2.1 linux/amd64
рдмреЗрдВрдЪ рд╕реЙрдХреЗрдЯ:
8GiB 0:00:16 [ 506MiB/s] [============================>] 100%
рдмреЗрдВрдЪ HTTPLIB:
8GiB 0:01:31 [89.1MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ URLLIB3:
8GiB 0:01:20 [ 101MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ рдЕрдиреБрд░реЛрдз
8GiB 0:01:20 [ 101MiB/s] [===========================>] 100%
рдмреЗрдВрдЪ рдЬрд╛рдУ HTTP
8GiB 0:00:21 [ 389MiB/s] [============================>] 100%

рдпреЗ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдЕрддреНрдпрдВрдд рд╕реНрдерд┐рд░ рд╣реИрдВ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рджрд░реНрд╢рд╛рддреА рд╣реИрдВ:

  1. рд░реЙ рд╕реЙрдХреЗрдЯ рд░реАрдб рдлрд╛рд╕реНрдЯ (рдбреБрд╣) рд╣реИрдВред
  2. рдЧреЛ рдПрдХ рд░реЙ рд╕реЙрдХреЗрдЯ рд░реАрдб рдХреА рдЧрддрд┐ рдХрд╛ рд▓рдЧрднрдЧ 80% рд╣реИред
  3. urllib3 рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдкрдврд╝рдиреЗ рдХреА рдЧрддрд┐ рдХрд╛ рд▓рдЧрднрдЧ 20% рд╣реИред
  4. рдЕрдиреБрд░реЛрдз urllib3 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реИ, рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣рдо
    рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдЬреЛрдбрд╝реЗрдВред
  5. httplib рдЕрдиреБрд░реЛрдз/urllib3 рд╕реЗ рдзреАрдорд╛ рд╣реИред рдмрд╕ рдЕрд╕рдВрднрд╡ рд╣реИ,
    рдФрд░ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ httplib рдпрд╛ рд╕реЙрдХреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
    рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ httplib рдирд╣реАрдВ рд╣реИред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/kennethreitz/requests/issues/2371#issuecomment -65829335
.

рд╣рд╛рдБ, рдпрд╣ httplib рдХреЗ рдкреНрд░рджрд░реНрд╢рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд░рддрд╛ рд╣реИред

рдирдП рдкрд░рд┐рдгрд╛рдо рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖:

Python 2.7.6
go version go1.2.1 linux/amd64
BENCH SOCKET:
   8GiB 0:00:16 [ 499MiB/s] [================================>] 100%
BENCH HTTPLIB:
   8GiB 0:01:12 [ 113MiB/s] [================================>] 100%
BENCH URLLIB3:
   8GiB 0:01:21 [ 100MiB/s] [================================>] 100%
BENCH REQUESTS
   8GiB 0:01:20 [ 101MiB/s] [================================>] 100%
BENCH GO HTTP
   8GiB 0:00:20 [ 391MiB/s] [================================>] 100%
  1. рд░реЙ рд╕реЙрдХреЗрдЯ рд░реАрдб рдлрд╛рд╕реНрдЯ (рдбреБрд╣) рд╣реИрдВред
  2. рдЧреЛ рдПрдХ рд░реЙ рд╕реЙрдХреЗрдЯ рд░реАрдб рдХреА рдЧрддрд┐ рдХрд╛ рд▓рдЧрднрдЧ 80% рд╣реИред
  3. httplib рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдкрдврд╝рдиреЗ рдХреА рдЧрддрд┐ рд╕реЗ рдХреЗрд╡рд▓ 25% рд╕реЗ рдХрдо рд╣реИред
  4. urllib3 рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдкрдврд╝рдиреЗ рдХреА рдЧрддрд┐ рдХрд╛ рд▓рдЧрднрдЧ 20% рд╣реИ, httplib рдореЗрдВ рдХреБрдЫ рдЫреЛрдЯреЗ рдУрд╡рд░рд╣реЗрдб рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред
  5. рдЕрдиреБрд░реЛрдз urllib3 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реИ, рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рддреЛ, рдпрдХреАрдирди рдпрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рдЧрдд httplib рд╣реИред рдЗрд╕реЗ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП httplib рдХреЛ рд░рд╛рд╕реНрддреЗ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ httplib рдХрд╛ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрдВ рдЦрд░реНрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ bench_httplib.py рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрдЧрд▓рд╛ рдХрджрдо рд╣реИред

рдореИрдВрдиреЗ рдЙрд╕ рд▓рд╛рдЗрди рдХреЛ bench_socket.py рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ socket.makefile рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реЙрдХреЗрдЯ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдзреАрдорд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддреЗрдЬрд╝ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдЙрддреНрддрд░ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг-рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╣реИ: рдЦрдВрдбрд┐рдд рд╣реИрдВрдбрд▓рд┐рдВрдЧред
рджреЗрдЦреЗрдВ: https://github.com/alex/http-client-bench/pull/6 , рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛
рд╕рд░реНрд╡рд░ рдкрд░ рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ рдХреБрдЫ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИред

рд╢реБрдХреНрд░рд╡рд╛рд░ 05 рджрд┐рд╕рдВрдмрд░ 2014 рдХреЛ рджреЛрдкрд╣рд░ 12:24:53 рдмрдЬреЗ рдХреЛрд░реА рдмреЗрдирдлреАрд▓реНрдб рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рддреЛ, рдпрдХреАрдирди рдпрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рдЧрдд httplib рд╣реИред рдЗрд╕реЗ рддреЗрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рд░рд╛рд╕реНрддреЗ рд╕реЗ httplib рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред

рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ httplib рдХрд╛ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрдВ рдЦрд░реНрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ
рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдмреЗрдВрдЪ_httplib.py рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрдЧрд▓рд╛ рдХрджрдо рд╣реИред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/kennethreitz/requests/issues/2371#issuecomment -65831653
.

рджрд┐рд▓рдЪрд╕реНрдкред

рдЦрдВрдбрд┐рдд рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧреЛ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЪрдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ HTTP рдореЛрдб рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ...рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд!

рдПрдХ рдмрд╛рдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: рдпрджрд┐ рд╕реЙрдХреЗрдЯ рдкрд┐рдЫрд▓реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЦрдВрдбрд┐рдд рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдбрд┐рдХреЛрдб рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдЙрд╕реЗ рдПрдХ рдЕрдиреБрдЪрд┐рдд рд▓рд╛рдн рдорд┐рд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдбреЗрдЯрд╛ рдкрдврд╝ рд░рд╣рд╛ рдерд╛! рд╡реЗ рд╕рднреА рдЦрдВрдбрд┐рдд рд╣реЗрдбрд░ рдФрд░ рд╕рд╛рде рд╣реА 8GB рдбреЗрдЯрд╛ рдкрдврд╝ рд░рд╣реЗ рдереЗред

рдпрд╣ рдПрдХ рдЕрдиреБрд╡рд░реНрддреА рдкреНрд░рд╢реНрди рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ: рдХреНрдпрд╛ рд╣рдореЗрдВ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рди рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдкрдврд╝ рд░рд╣реА рд╣реИрдВ?

рд╣рд╛рдВ, рд╕реЙрдХреЗрдЯ рдкрд░рдд рдзреЛрдЦрд╛ рджреЗ рд░рд╣реА рдереА, рдЗрд╕рдиреЗ рдЦрдВрдбрд┐рдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдбреАрдХреЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛,
рдФрд░ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдо рдкрдврд╝реЗрдВред рдпрд╣ "рдХрд┐рддрдиреА рддреЗрдЬреА рд╕реЗ" рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдерд╛
рдХреНрдпрд╛ рд╣рдо рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ", рдХреБрдЫ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

рд╢реБрдХреНрд░рд╡рд╛рд░ 05 рджрд┐рд╕рдВрдмрд░ 2014 рдХреЛ рджреЛрдкрд╣рд░ 12:33:10 рдмрдЬреЗ рдХреЛрд░реА рдмреЗрдирдлреАрд▓реНрдб рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рджрд┐рд▓рдЪрд╕реНрдкред

рдЦрдВрдбрд┐рдд рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реВрдВ
рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ go рдЗрд╕реЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЪрдВрдХрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ
рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП HTTP рдореЛрдбред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ...рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд!

рдПрдХ рдмрд╛рдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: рдпрджрд┐ рд╕реЙрдХреЗрдЯ рдЦрдВрдбрд┐рдд рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдбрд┐рдХреЛрдб рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛
рдкрд┐рдЫрд▓реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рддреЛ рдЗрд╕реЗ рдЕрдиреБрдЪрд┐рдд рд▓рд╛рдн рдорд┐рд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдерд╛
рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдбреЗрдЯрд╛ рдкрдврд╝ рд░рд╣реЗ рдереЗ! рд╡реЗ рд╕рдм рдкрдврд╝ рд░рд╣реЗ рдереЗ
рдЦрдВрдбрд┐рдд рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде 8GB рдбреЗрдЯрд╛ред

рдпрд╣ рдПрдХ рдЕрдиреБрд╡рд░реНрддреА рдкреНрд░рд╢реНрди рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ: рдХреНрдпрд╛ рд╣рдо рдЕрднреА рднреА рдЗрди рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ
рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рди рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/kennethreitz/requests/issues/2371#issuecomment -65833299
.

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рдЙрд╕ рдЦрдВрдб рдЖрдХрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рд╕рдордп рдореЗрдВ рд╕реЙрдХреЗрдЯ рд╕реЗ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВред

рд╕реБрдкрд░ рд╕рд╣рд╛рдпрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП @alex рдХреЗ рд▓рд┐рдП рдХреЗрдХ: рдХреЗрдХ:

@nelhage рдиреЗ рд╡рд┐рднрд┐рдиреНрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдХреБрдЫ рд╕реНрдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреА (рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдореЗрдВ)
рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: рдЦрдВрдбрд┐рдд рдорд╛рдорд▓рд╛) https://gist.github.com/nelhage/dd6490fbc5cfb815f762
рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ httplib рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдпрд╣ рд╣реЛрддрд╛ рд╣реИ
рд╣рдореЗрд╢рд╛ рд╕реЙрдХреЗрдЯ рд╕реЗ рдкреВрд░рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рдкрдврд╝рдирд╛ред

рд╕реЛрдо рджрд┐рд╕рдВрдмрд░ 08 2014 рдХреЛ 9:05:14 рдкреВрд░реНрд╡рд╛рд╣реНрди рдкрд░ рдХреЗрдиреЗрде рд░рд┐рдЯреНрдЬ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рд╕реБрдкрд░ рд╕рд╣рд╛рдпрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП @alex https://github.com/alex рдХреЗ рд▓рд┐рдП рдХреЗрдХ [рдЫрд╡рд┐:
:рдХреЗрдХ:]

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/kennethreitz/requests/issues/2371#issuecomment -66147998
.

рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рдПрдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдХреЛрдИ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдирд╛рдП рдирд╣реАрдВ рд░рдЦ рд░рд╣рд╛ рд╣реИ? ( @ рд▓реБрдХрд╛рд╕рд╛ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 2 рдкреИрдЪ рд╕реЗрдЯ рд╣реИрдВ рдЬреЛ> 1 рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╣реИрдВред) рд╢рд╛рдпрдж рдореИрдВ рдЖрдЬ рд░рд╛рдд рдХрд╣реАрдВ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдмрджрдмреВ

рдХрд┐рд╕реА рдХреЛ (рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЕрд╕реНрдкрд╖реНрдЯ) рд╢рд╛рдпрдж рдкреАрдбреАрдмреА рдХреЗ рд╕рд╛рде рдбреНрд░рд┐рд▓ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ
рдпрд╛ рдХреБрдЫ рдФрд░ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдХреМрди рд╕рд╛ рд╕рдЯреАрдХ рдХреЛрдб рдЙрди 20-рдмрд╛рдЗрдЯ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣рд╛ рд╣реИ
рдкрдврд╝рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдПрдХ рдЕрдЪреНрдЫреА рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХреЗрдВред

рд╕реЛрдо рджрд┐рд╕рдВрдмрд░ 08 2014 рдХреЛ 9:14:09 рдкреВрд░реНрд╡рд╛рд╣реНрди рдкрд░ рдЗрдпрд╛рди рдХреЙрд░реНрдбрд╛рд╕реНрдХреЛ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рдПрдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ
рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ? ( @ рд▓реБрдХрд╛рд╕рд╛ https://github.com/Lukasa рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 2 рдкреИрдЪ рд╣реИрдВ
рд╕реЗрдЯ рдЬреЛ >1 рд╕рд╛рд▓ рд╕реЗ рдЦреБрд▓реЗ рд╣реИрдВред) рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдмрджрдмреВ рдЙрдард╛рдКрдВрдЧрд╛
рдХрд╣реАрдВ рдЖрдЬ рд░рд╛рдд

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/kennethreitz/requests/issues/2371#issuecomment -66149522
.

рдореИрдВ рдЗрд╕реЗ рдЖрдЬ рд░рд╛рдд рдпрд╛ рдХрд▓ рдореЗрдВ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рдФрд░ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред

рддреЛ, рдореВрд▓ рдХрд╛рд░рдг рдкрд░ рдХреЛрдИ рдЦрдмрд░? рдЗрди рд▓рдШреБ рдкрдарди рдХреЛ рдХреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЙрдирдХреЗ рдмрд┐рдирд╛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ?

@kislyuk рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдХреНрд░рд┐рд╕рдорд╕ рдХреА рдЫреБрдЯреНрдЯреА рдХрд╛ рдкреАрдЫрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рд╣реЛрдЧрд╛ред

рдзрдиреНрдпрд╡рд╛рдж @ рд▓реБрдХрд╛рд╕рд╛ред рдореИрдВ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ urllib3/рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЦрдВрдбрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдЧрддрд┐ рдХрд░реНрд▓ рдФрд░ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдзреАрдореА рд╣реИ, рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рд╣реИ рдХрд┐ рдпрд╣ рдЕрдкрд░рд╛рдзреА рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдШреВрдо рд░рд╣рд╛ рдерд╛ред рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд╛рда httplib . рдореЗрдВ _read_chunked functon рд╕реЗ рдЖрддреЗ рд╣реИрдВ

https://fossies.org/linux/misc/Python-2.7.9.tgz/Python-2.7.9/Lib/httplib.py#l_585

2 рдмрд╛рдЗрдЯ рдкрдврд╝рддрд╛ рд╣реИ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд▓рд╛рдЗрди 622 рд╕реЗ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдкрд╣рд▓реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдПрдХ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╕реНрдЯреНрд░реЗрд╕ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛:
recvfrom(3, "400\r\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0"..., 8192, 0, NULL, NULL) = 8192
recvfrom(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ 0\0\0\0\0\0\0\0\0\0"..., 54, 0, рдиреНрдпреВрд▓, рдиреНрдпреВрд▓) = 54
recvfrom(3, "\r\n", 2, 0, NULL, NULL) = 2

рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • self.fp.readline (рдкрдВрдХреНрддрд┐ 591) 8192 рдмрд╛рдЗрдЯреНрд╕ (рд╕реЙрдХреЗрдЯ.рд░реАрдбрд▓рд╛рдЗрди рдореЗрдВ) рдХреЗ рд▓рд┐рдП рдмрдлрд░реНрдб рд░реАрдб рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ
  • рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдЦрдВрдб 1031 рдмрд╛рдЗрдЯреНрд╕ (5 рдмрд╛рдЗрдЯ рдЦрдВрдб рд▓рдВрдмрд╛рдИ ("400\r\n") + 1024 рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ + рдЯрд░реНрдорд┐рдиреЗрдЯрд░ рдХреЗ 2 рдмрд╛рдЗрдЯреНрд╕)
  • рд╣рдо рдмрдлрд╝рд░ рдХрд┐рдП рдЧрдП 8192 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╕реЗ 7 рдРрд╕реЗ рд╡рд┐рдЦрдВрдбреВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ 975 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ
  • рдлрд┐рд░ рд╣рдо рдЕрдЧрд▓реА рдЦрдВрдб рд▓рдВрдмрд╛рдИ (5 рдмрд╛рдЗрдЯреНрд╕) рдкрдврд╝рддреЗ рд╣реИрдВ рдЬреЛ 970 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдирд┐рдХрд▓рддреА рд╣реИ
  • рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 970 рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдЪрдВрдХ (1024) рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рд╣рдо 54 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВ
  • рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП httplib рдмрдХрд╛рдпрд╛ рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рдПрдХ sock.read(54) рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ socket.read (рдПрдХ рд╕реНрдкрд╖реНрдЯ рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде) рдирд┐рд░реНрджрд┐рд╖реНрдЯ 54 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЬрд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВрдЧреЗ (рдЕрдиреНрдп 8192 рдХреЛ рдмрдлрд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп)
  • рдлрд┐рд░ рд╣рдореЗрдВ рдЪрдВрдХ рдЯрд░реНрдорд┐рдиреЗрдЯрд░ рдкрдврд╝рдиреЗ рдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ 2 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ рдКрдкрд░ рдЬреИрд╕рд╛ рд╣реА рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ

рдлрд┐рд░ рдкреИрдЯрд░реНрди рджреЛрд╣рд░рд╛рдПрдЧрд╛ (рдЪрд░рдг 1 рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ)

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ 2 рдмрд╛рдЗрдЯ рдЪрдВрдХ рдЯрд░реНрдорд┐рдиреЗрдЯрд░ рдХреЛ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдЪрдВрдХ рдмреЙрдбреА рд░реАрдб рдореЗрдВ рд░реЛрд▓ рдХрд░рдХреЗ рдПрдХ рдорд╛рдореВрд▓реА (20% рдпрд╛ рддреЛ) рд╕реНрдкреАрдб-рдЕрдк рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛рдиреА рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:

            value.append(self._safe_read(chunk_left)) 
            amt -= chunk_left

        self._safe_read(2)  # toss the CRLF at the end of the chunk

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдРрд╕рд╛ рдХрд░реЗрдВ:

            value.append(self._safe_read(chunk_left + 2)[:-2]) 
            amt -= chunk_left

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдпрджрд┐ 54 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдкрдврд╝рд╛ рдЧрдпрд╛ 54 (рдпрд╛рдиреА 8192 рдмрд╛рдЗрдЯреНрд╕) рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рдЗрдЯреНрд╕ рдмрдлрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЬрдм 2 рдмрд╛рдЗрдЯ рдкрдврд╝рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рддреЛ рдмрдлрд░ рд╕реЙрдХреЗрдЯ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЗрд╕рд╕реЗ рдЖрдЧреЗред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЫреЛрдЯреЗ рдкрдарди рдереНрд░реВрдкреБрдЯ рдХреЗ рдиреБрдХрд╕рд╛рди рдореЗрдВ рдореБрдЦреНрдп рдХрд╛рд░рдХ рд╣реИрдВ (рдпрд╛ рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдкрд░ рдирд╣реАрдВ)ред рдореИрдВрдиреЗ рд╕реЙрдХреЗрдЯ рдмрдлрд░ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рд╛ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ 1031 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдЧреБрдгрдХ рдерд╛ рдФрд░ рд╕реНрдЯреНрд░реЗрд╕ рдХреЗ рдЕрдм рдЫреЛрдЯреЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЗрд╕рдХрд╛ рдереНрд░реВрдкреБрдЯ рдкрд░ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдереНрд░реВрдкреБрдЯ рдХрд╛ рдиреБрдХрд╕рд╛рди рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ socket.py рдЫреЛрдЯреЗ рдкрдврд╝рдиреЗ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛрдб рд╣реИ (рд╕реЙрдХреЗрдЯ рд╕реЗред рдкрдврд╝реЗрдВ):

https://fossies.org/linux/misc/Python-2.7.9.tgz/Python-2.7.9/Lib/socket.py#l_336

рдЬрдм рдЖрдк рдПрдХ рд╕реНрдкрд╖реНрдЯ рд▓рдВрдмрд╛рдИ рдХреЛ рд╕реЙрдХреЗрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдкрдврд╝реЗрдВ рдФрд░ рдЗрд╕реЗ рдореМрдЬреВрджрд╛ рдмрдлрд░ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдХреЛрдб рдкрде рд╣реИ:

        buf = self._rbuf
        buf.seek(0, 2)  # seek end

        #.....

        # Read until size bytes or EOF seen, whichever comes first
        buf_len = buf.tell()
        if buf_len >= size:
            # Already have size bytes in our buffer?  Extract and return.
            buf.seek(0)
            rv = buf.read(size)
            self._rbuf = StringIO()
            self._rbuf.write(buf.read())
            return rv

рдЬреЛ рдореБрджреНрджрд╛ рдореИрдВ рдпрд╣рд╛рдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ 2 рдмрд╛рдЗрдЯ рдкрдврд╝рдиреЗ рдХрд╛ рдорддрд▓рдм рдЕрдкрдард┐рдд рд╢реЗрд╖ рдХреЛ рдПрдХ рддрд╛рдЬрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧрд┐рдпреЛ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рдЫреЛрдЯреЗ-рдЫреЛрдЯреЗ рдкрдарди рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧрд┐рдпреЛ рдХреЛ рдЕрдкрдард┐рдд рд╢реЗрд╖ рдХреЛ рддрд╛рдЬрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧрд┐рдпреЛ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рдореМрдЬреВрджрд╛ рдкреИрдЯрд░реНрди рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддреНрдпреЗрдХ рдкрдврд╝рдиреЗ рдкрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдереНрд░реВрдкреБрдЯ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ

@gardenia рдореБрдЭреЗ рдпрд╣ рд╕рдм рдЕрд╡рд╢реЛрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкреНрд░рдпрд╛рд╕ рдФрд░ рдпрд╣рд╛рдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред @shazow рд╢рд╛рдпрдж рдЖрдкрдХреЛ @gardenia рдХрд╛ рд╢реЛрдз рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧреЗрдЧрд╛ред

: +1: рдзрдиреНрдпрд╡рд╛рдж @gardeniaред рд╕рдВрдпреЛрдЧ рд╕реЗ, рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдореЗрд░реЗ рдЕрдкрдиреЗ рд╢реЛрдз рдиреЗ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЦрдВрдбрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди urllib3 рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 20+% рддреЗрдЬ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рдХрд╛рд░рдг рдЕрд▓рдЧ рд╣реИред

рдЖрдХрд░реНрд╖рдХ, рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! :)

@Lukasa рдХреЗ рд╣рд╛рдЗрдкрд░ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рдорд╣рд╛рди рд▓рдХреНрд╖реНрдп рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

@alex - рдореИрдВрдиреЗ urllib3 рдмрдирд╛рдо рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЧреИрд░-рдЦрдВрдбрд┐рдд рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рд╛ рдЦрд┐рд▓реМрдирд╛ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╕рдорд╛рди 20% рдХреА рдЧрд┐рд░рд╛рд╡рдЯ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИред

рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рд╕реНрдЯреНрд░реАрдо() (urllib3 рд╕реЗ) рдХреЗ рдЗрдирд▓рд╛рдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХреЛ self.raw.stream рдкрд░ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдерд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдореЗрд░реА рдорд╢реАрди рдкрд░ рдереНрд░реВрдкреБрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ urllib3 рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рдХрд░реАрдм рдЖ рдЧрдпрд╛ рд╣реИ:

--- requests.repo/requests/models.py    2015-03-06 16:05:52.072509869 +0000
+++ requests/models.py  2015-03-07 20:49:25.618007438 +0000
@@ -19,6 +19,7 @@
 from .packages.urllib3.fields import RequestField
 from .packages.urllib3.filepost import encode_multipart_formdata
 from .packages.urllib3.util import parse_url
+from .packages.urllib3.util.response import is_fp_closed
 from .packages.urllib3.exceptions import (
     DecodeError, ReadTimeoutError, ProtocolError, LocationParseError)
 from .exceptions import (
@@ -652,8 +654,12 @@
             try:
                 # Special case for urllib3.
                 try:
-                    for chunk in self.raw.stream(chunk_size, decode_content=True):
-                        yield chunk
+                    while not is_fp_closed(self.raw._fp):
+                        data = self.read(amt=chunk_size, decode_content=True)
+
+                        if data:
+                            yield data
+
                 except ProtocolError as e:
                     raise ChunkedEncodingError(e)
                 except DecodeError as e:

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рднреА рдХреЛрдИ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИред

(рдзреНрдпрд╛рди рджреЗрдВ рд╣рд╛рдБ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ is_fp_closed рдкрд░ рдХреЙрд▓ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдмрд╕реНрдЯрд┐рдВрдЧ рд╣реИ, рдпрд╣ рдПрдХ рдЧрдВрднреАрд░ рдкреИрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реИ)

@shazow рдпрд╣ рдореЗрд░реА рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рд╛рдЗрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ BufferedSocket рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЫреЛрдЯреЗ рдкрдврд╝рдиреЗ рдХреЛ рд░реЛрдХрдХрд░, рдЙрд╕ рдЕрдХреНрд╖рдорддрд╛ рдХреЛ рдмрд╣реБрдд рдХреБрдЫ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ Py3 рдкрд░ httplib рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ io.BufferedReader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореЛрдЯреЗ рддреМрд░ рдкрд░ BufferedSocket рдХреЗ рд╕рдорд╛рди рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм hyper рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд HTTP/1.1 рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрди рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ hyper рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХрд░реАрдм рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИред рд╕рдорд╛рдкрдиред

рдореИрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ, 10x рдХрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ requests рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдореЗрдВ urllib3 ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ urllib3 рдХреЗ HTTPResponse рд╡рд░реНрдЧ рдХреЗ рднреАрддрд░ рд░рд╣рддрд╛ рд╣реИ, рдЬрдм рдЗрд╕реЗ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдереНрд░реВрдкреБрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦрд░рд╛рдм рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рдЕрдкрдирд╛ рдХреЛрдб рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд╣реИрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ: рдореИрдВ urllib3 рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд░реЗрдЦрд╛рдВрдХрд┐рдд httplib.HTTPResponse рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдереНрд░реВрдкреБрдЯ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИ рд╣реИред

рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп: urllib3 рдХрд╛ HTTPResponse рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ io.IOBase ред Python3 рдХрд╛ httplib.HTTPResponse рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ io.BufferedIOBase ред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЗрд╕рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕