Gunicorn: рдЬреЗрд╡реЗрдВрдЯ рд╡рд░реНрдХрд░реНрд╕ рдХреЗ рд╕рд╛рде рдЖрдИрдУ рдмрд╛рдзреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 15 рдЕрдкреНрд░реИрд▓ 2019  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: benoitc/gunicorn

рд╣реИрд▓реЛ рд╕рднреА рдХреЛ,

рдореИрдВ рдПрдХ рдПрдкреАрдЖрдИ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрдИ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреБрдЫ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдХрд╣реАрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИред рдореИрдВ рдЧреНрд░реАрдирд▓реЗрдЯ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрдИрдУ рдмрд╛рдЙрдВрдб рд╣реИред

рдореИрдВрдиреЗ рдЬреЛ рдкрдврд╝рд╛ рд╣реИ, рдЙрд╕рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░реАрдирд▓реЗрдЯ рдХреЛ рдЧрдирд┐рдХреЛрд░реНрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдереНрд░реЗрдб рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЬрдм рдХрднреА рднреА рдЖрдИрдУ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХреЙрд▓ рдХреЛ рдЖрдИрдУ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рддреЛ рдЧреНрд░реАрдирд▓реЗрдЯ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдЧрдирд┐рдХреЛрд░реНрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рддреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдорд╛рдИ рдРрдк (рдлреНрд▓рд╛рд╕реНрдХ рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ requests.get(...) , рдЧреНрд░реАрдирд▓реЗрдЯ рдЕрдЧрд▓реЗ requests.get() рддрдХ рдмреНрд▓реЙрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛

def fetch(pid):
    response0 = requests.get('http://some-micro-service-0.com/')
    response1 = requests.get('http://some-micro-service-1.com/')
    response2 = requests.get('http://some-micro-service-2.com/')
    return combine_response(response0, response1, response2)

рд╡рд┐рд▓рдВрдмрддрд╛ (рдЬреЛ рдХреБрдЫ рдореИрдВ рдвреВрдВрдв рд░рд╣рд╛ рд╣реВрдВ) рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЕрдзрд┐рдХ рд╕рдореЗрдХрди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд░реАрдХреНрд╡реЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ?

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдорд╡рд░реНрддреА рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд░реАрдХреНрд╡реЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ,

grequests.map() рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╕рдВрд╕реНрдХрд░рдг рд╣реИред

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

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

gevent рдХреЗ рдкрд╛рд╕ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрдИ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП

(рдЖрдкрдХрд╛ рдорд╛рдорд▓рд╛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛрдЧрд╛, рдЖрдк рдЗрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп response рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред)

рд▓реЗрдХрд┐рди рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Group.map рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рднреА рд╕рд░рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

from gevent import pool

jobs = pool.Group()
responses = jobs.map(requests.get, 
                     ('http://one', 'http://two', 'http://three'))

рдореИрдВ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдорд╡рд░реНрддреА рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд░реАрдХреНрд╡реЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ,

grequests.map() рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╕рдВрд╕реНрдХрд░рдг рд╣реИред

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

рдЯрд┐рдХрдЯ рдмрдВрдж рдХрд░рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рдкрд░ рдХреБрдЫ рд╕рдордп рд╕реЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рдереАред

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

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Bogdanp picture Bogdanp  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vaibhavpatil123 picture vaibhavpatil123  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mw44118 picture mw44118  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

agilezebra picture agilezebra  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bywangxp picture bywangxp  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ