Scikit-learn: рдЕрднрд┐рд╕рд░рдг рдкреНрд░рдЧрддрд┐ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрддрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдлрд╝рд░ре░ 2011  ┬╖  31рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: scikit-learn/scikit-learn

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

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

http://docs.python.org/library/logging.html

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

рдкрд╛рдВрдЪрд╡рд╛рдВ рд╡рд┐рдХрд▓реНрдк рд╡рд░реНрдмреЛрдЬрд╝ рдлрд╝реНрд▓реИрдЧ рдХреЛ рд╣рдЯрд╛рдирд╛, рд╣рд░ рдЬрдЧрд╣ рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓реЙрдЧрд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореИрдВ рд╡рд░реНрдмреЛрдЬрд╝ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реВрдВрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдкреНрд░рддрд┐-рдЕрдиреБрдорд╛рдирдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ
рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ, рдФрд░ рд╡рд░реНрдмреЛрдЬрд╝ рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ, рдЦрд░рд╛рдм
рдкреНрд░рд▓реЗрдЦрд┐рдд,

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ verbose рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдХреЗрд╡рд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдЦреЛрдЬрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рджреЗрдЧрд╛ред

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

рдЗрд╕ рдкрд░ https://github.com/GaelVaroquaux/scikit-learn/tree/progress_logger рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдЬреЛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдмрд╛рдХреА рд╣реИ, рд╡рд╣ рд╕рдВрднрд╡рдд: рдХрд╛рдлреА рдпрд╛рдВрддреНрд░рд┐рдХ рдХрд╛рд░реНрдп рд╣реИред

рдирдП рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдмреВрд╕реНрдЯрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рднреА рдХрд╛рдо рд╣реИред

рд▓реЙрдЧрд┐рдВрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП -1 рдЗрд╕ рдкрд░ред

рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ?

рд╣рдо рдХреИрд╕реЗ рдПрдХ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ STDOUT рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ? рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣реИ рдирд╛?

рдпрд╣ рдореБрджреНрджрд╛ 2011 рд╕реЗ рдЦреБрд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ RFECV рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ (https://github.com/scikit-learn/scikit-learn/blob/a24c8b464d094d2c468a16ea9f8bf8d42d949f84/sklearn/feature_selection/rfe.py#L273)ред рдореИрдВ рдкреНрд░рдЧрддрд┐ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд░реНрдмреЛрдЬрд╝ рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдВрджрд░ рдкреИрдЪ sys.stdout рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рд▓реЙрдЧрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╕рд░рд▓ рдФрд░ рд╕рд╛рдл рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред

sklearn рдореЗрдВ рдЕрдиреНрдп рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рд╣реИрдВ рдЬреИрд╕реЗ #8105 рдФрд░ #10973 рдЬреЛ sklearn рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓реЙрдЧрд┐рдВрдЧ рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдВрдЧреЗред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрдХреЗрд▓реЗрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдврд╝рд┐рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЛрдЧрд╛ред

рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рд╢рд╛рдпрдж рдПрдХ рдХреЙрд▓рдмреИрдХ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ
рд▓реЙрдЧрд┐рдВрдЧ

рдореИрдВ рдЕрднреА рдереЛрдбрд╝рд╛ рд╡реНрдпрд╕реНрдд рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдХрд┐рд╕реА рднреА рд░реВрдк рдореЗрдВ рд╕реНрдХреЗрд▓реЗрди рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдорд╛рдирдХ рдкрд╛рдпрдерди рд▓реЙрдЧрд┐рдВрдЧ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ)ред

рдХреНрдпрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рд╣реИ рдХрд┐ рдЬрдм рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ рддреЛ verbose=True рдХреНрдпрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛? рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде dask-ml рдореЗрдВ рдереЛрдбрд╝рд╛ рдирд┐рдкрдЯ рд░рд╣реЗ рд╣реИрдВ: https://github.com/dask/dask-ml/pull/528ред

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

https://github.com/dask/dask-ml/pull/528 рдореЗрдВ рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ verbose=True рд▓рд┐рдП рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд▓реЙрдЧрд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ"ред рдЖрдк рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ INFO рд╕реНрддрд░ рдХреЗ рд╕рдВрджреЗрд╢ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдбрдЖрдЙрдЯ рдкрд░ рдореБрджреНрд░рд┐рдд рд╣реЛрдВред

рдХреНрдпрд╛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдЕрдк рдЙрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ
рдЕрдиреБрдорд╛рдирдХ рдпрд╛ рдЕрдиреБрдорд╛рдирдХ рдкреНрд░рдХрд╛рд░?

dask/dask-ml#528 рдореЗрдВ рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╡рд░реНрдмреЛрдЬрд╝ = рдЯреНрд░реВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд▓реЙрдЧрд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ"ред

рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрддреБрд▓рди рд▓рдЧрддрд╛ рд╣реИред рд▓реЙрдЧрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИред рдПрдХ рдФрд░ "рд╣реИрдХ" рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ info рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ verbose=True рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рддреЛ рд▓реЙрдЧ рдХреЛ warning рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИрдВред

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

@ jnothman рдХреА рдЯрд┐рдкреНрдкрдгреА рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред scikit-learn рд╣рдореЗрд╢рд╛ рд╕рдВрджреЗрд╢ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рд╡рд░реНрдмреЛрдЬрд╝ рдХреАрд╡рд░реНрдб рд▓реЙрдЧрд░ рд╕реНрддрд░ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рд╕реНрдерд╛рдиреАрдп рд╣реИрдВрдбрд▓рд░ рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рд╕реВрдЪрдирд╛ рд╕реЗ рдбреАрдмрдЧ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ
рд╡рд░реНрдмреЛрдЬрд╝ рдмрдврд╝рдиреЗ рдкрд░ рд╕реНрдЯреНрд░реАрдо рдкрд░ рд╕реНрддрд░

рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░ https://docs.python.org/3/library/logging.html#logging -levels рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╣рдо INFO рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЬрдм verbose=1 , рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИрдВрдбрд▓рд░ рдкрд░рд┐рд╡рд░реНрддрди рдЬрд╛рдирдХрд╛рд░реА -> рдЪреЗрддрд╛рд╡рдиреА, рдФрд░ рдбреАрдмрдЧ -> рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред рдЬрдм рд╣рдо verbose>=2 рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рднреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд╛рдирдХрд╛рд░реА -> рдЪреЗрддрд╛рд╡рдиреА рд╣реЛрддреА рд╣реИ рд▓реЗрдХрд┐рди рдбреАрдмрдЧ -> рдЪреЗрддрд╛рд╡рдиреА рднреА рд╣реЛрддреА рд╣реИ, рдФрд░ рдЕрдиреБрдорд╛рдирдХ verbose>=2 рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рд╡рд░реНрдмреЛрдЬрд╝ рдмрдврд╝рдиреЗ рдкрд░ рдЕрдзрд┐рдХ рдбреАрдмрдЧ рд╕рдВрджреЗрд╢ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░реЗрдВ"ред рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдорд╛рдирдХреЛрдВ рдХреЗ рдмреАрдЪ рдпрд╣ рдЕрд░реНрде рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

рдирдорд╕реНрддреЗ, рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред рдореБрдЭреЗ logging рд╕рд╛рде рдХреБрдЫ рдЕрдиреБрднрд╡ рд╣реИ рдФрд░ рдЕрдЧрд░ рдХреБрдЫ рдЖрдо рд╕рд╣рдорддрд┐ рдФрд░ рдпреЛрдЬрдирд╛ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддреА рд╣реИ рддреЛ рдпрд╣рд╛рдВ рдПрдХ рд╡реГрджреНрдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред

рдпрд╣рд╛рдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

  1. рдХреЙрд▓рдмреИрдХ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  2. verbose рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрджреЗрд╢ рдХрд╛ рд╕реНрддрд░ рдмрджрд▓реЗрдВ
    if verbose:
        logger.debug(message)
    else:
        logger.info(message)
  1. logger . рдХреЗ рдЖрдзрд╛рд░ рдкрд░ verbose рдХреЗ рд╕реНрддрд░ рдХреЛ рдмрджрд▓реЗрдВ
    if verbose:
        logger.selLevel("DEBUG")
  1. рд╡рд░реНрдмреЛрдЬрд╝ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрддрд░ DEBUG рд╕рд╛рде рдПрдХ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ
    if verbose:
        verbose_handler = logging.StreamHandler()
        verbose_handler.setLevel("DEBUG")
        logger.addHandler(verbose_handler)

рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░:

рд╡рд┐рдХрд▓реНрдк 1 рдпрд╛ рд╡рд┐рдХрд▓реНрдк 4 рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

  • рд╡рд┐рдХрд▓реНрдк 1 (рдХреЙрд▓рдмреИрдХ) рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рд╣реИ (рд▓реЛрдЧ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдЪреАрдЬреЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рд▓реЗрдХрд┐рди рдпрд╣ рдореИрд╕реЗрдЬрд┐рдВрдЧ/рд╕реНрдЯреЗрдЯ рдХреИрдкреНрдЪрд░ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ рдХрдо рд▓рдЪреАрд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред (рдХреНрдпрд╛ рдХреЙрд▓рдмреИрдХ рдХреЗрд╡рд▓ рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рд▓реВрдк рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдпрд╛ рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ?)
  • рд╡рд┐рдХрд▓реНрдк 2, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ logging рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ
  • рд╡рд┐рдХрд▓реНрдк 3 рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, logging рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ sklearn logging рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрд╡рдпрдВ logging рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП import logging; logging.getLogger("sklearn").setLevel("DEBUG") ред
  • рд╡рд┐рдХрд▓реНрдк 4 рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд╡рд┐рд╣рд┐рдд рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ NullHandler s рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рдореЗрдВ _not_ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдХреЗрд▓реЗрд░ рдореЗрдВ verbose рдЭрдВрдбреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реЙрдЧ рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА "рдлреАрдЪрд░" рд╣реИред

рдкрд╛рдВрдЪрд╡рд╛рдВ рд╡рд┐рдХрд▓реНрдк verbose рдЭрдВрдбреЗ рдХреЛ рд╣рдЯрд╛рдирд╛, рд╣рд░ рдЬрдЧрд╣ logging рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ logging API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ logging рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

@grisaitis рдзрдиреНрдпрд╡рд╛рдж! https://github.com/scikit-learn/scikit-learn/issues/17439 рдФрд░ https://github.com/scikit-learn/scikit-learn/pull/16925#issuecomment -638956487 рдореЗрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░реНрдЪрд╛рдПрдВ рднреА рджреЗрдЦреЗрдВ (рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ)ред рдЖрдкрдХреА рдорджрдж рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреА, рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЕрднреА рддрдХ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ :)

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

рдкрд╛рдВрдЪрд╡рд╛рдВ рд╡рд┐рдХрд▓реНрдк рд╡рд░реНрдмреЛрдЬрд╝ рдлрд╝реНрд▓реИрдЧ рдХреЛ рд╣рдЯрд╛рдирд╛, рд╣рд░ рдЬрдЧрд╣ рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓реЙрдЧрд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореИрдВ рд╡рд░реНрдмреЛрдЬрд╝ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реВрдВрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдкреНрд░рддрд┐-рдЕрдиреБрдорд╛рдирдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ
рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ, рдФрд░ рд╡рд░реНрдмреЛрдЬрд╝ рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ, рдЦрд░рд╛рдм
рдкреНрд░рд▓реЗрдЦрд┐рдд,

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ verbose рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдХреЗрд╡рд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдЦреЛрдЬрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рджреЗрдЧрд╛ред

рд╕рд╛рде рд╣реА, рдПрдХ рдЪреАрдЬ рдЬреЛ рд▓реЙрдЧрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд▓реЙрдЧрд┐рдВрдЧ рд╕рдВрджреЗрд╢ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ред рддреЛ рдЙрдкрдпреЛрдЧреА рд╕рд╛рдорд╛рди рдХрд╛ рдкреВрд░рд╛ рдирд┐рд░реНрджреЗрд╢ред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рд╕реАрдЦрдиреЗ рдХреЗ рджреМрд░рд╛рди рдиреБрдХрд╕рд╛рди рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ, рдЖрдк рджреЛрдиреЛрдВ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдХреЛ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ: logger.debug("Current loss: %(loss)s", {'loss': loss}) ред рдореБрдЭреЗ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд░ рд╕реНрдХреЗрд▓реЗрд░ рдЗрд╕реЗ рднреА рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред

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

рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдЬреЙрдмрд▓рд┐рдм рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ? рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдЕрдкреЗрдХреНрд╖рд┐рдд):

import logging
logger = logging.getLogger('sklearn')
logger.setLevel(2)

def get_level():
    another_logger = logging.getLogger('sklearn')
    return another_logger.level

results = Parallel(n_jobs=2)(
    delayed(get_level)() for _ in range(2)
)
results

```
[0, 0]

But that's probably not needed, since this works:
```python
import logging
import sys
logger = logging.getLogger('sklearn')
logger.setLevel(1)

handler = logging.StreamHandler(sys.stdout)
logger.addHandler(handler)


def log_some():
    another_logger = logging.getLogger('sklearn')
    another_logger.critical("log something")

results = Parallel(n_jobs=2)(
    delayed(log_some)() for _ in range(2)
)

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕реНрдЯрдбрдЖрдЙрдЯ рдФрд░ рд╕реНрдЯрдбрд░ рджреЛрдиреЛрдВ рдЬреНрдпреВрдкрд┐рдЯрд░ рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред

рдореЗрд░рд╛ рд╕рдкрдирд╛: рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рдЧрддрд┐ рд╕рд▓рд╛рдЦреЛрдВ рдпрд╛ рд╕рд╛рдЬрд┐рд╢ рдЕрднрд┐рд╕рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ред

рдкреБрдирдГ рд╡рд░реНрдмреЛрдЬрд╝: рд╡рд░реНрдмреЛрдЬрд╝ рдХреЛ рдкрджрд╛рд╡рдирдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣ рдХреНрд▓реАрдирд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд░реНрдмреЛрдЬрд╝ рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░рдирд╛ рдФрд░ рдЕрдиреБрдорд╛рдирдХ-рд╕реНрддрд░ рд▓реЙрдЧрд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╕реЗ рдПрдХ рдЕрдиреБрдорд╛рдирдХ рдХреЛ рд▓реЙрдЧ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рдирд╣реАрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдареАрдХ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ред

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

joblib рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВред

@amueller рдЬреЛ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИред рдореИрдВрдиреЗ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ред рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ concurrent.futures.ProcessPoolExecutor рд╣реИ, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ joblib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ...

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ joblib рд░рд╛рдЬреНрдп рдХреЛ logging ред рдХрд┐рд╕реА рднреА joblib рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

import concurrent.futures
import logging
import os

logger = logging.getLogger("demoЁЯЩВ")
logger.setLevel("DEBUG")

handler = logging.StreamHandler()
handler.setFormatter(
    logging.Formatter("%(process)d (%(processName)s) %(levelname)s:%(name)s:%(message)s")
)
logger.addHandler(handler)

def get_logger_info(_=None):
    another_logger = logging.getLogger("demoЁЯЩВ")
    print(os.getpid(), "another_logger:", another_logger, another_logger.handlers)
    another_logger.warning(f"hello from {os.getpid()}")
    return another_logger

if __name__ == "__main__":
    print(get_logger_info())

    print()
    print("concurrent.futures demo...")
    with concurrent.futures.ProcessPoolExecutor(2) as executor:
        results = executor.map(get_logger_info, range(2))
        print(list(results))

    print()
    print("joblib demo (<strong i="17">@amueller</strong>'s example #2)...")
    from joblib import Parallel, delayed
    results = Parallel(n_jobs=2)(delayed(get_logger_info)() for _ in range(2))
    print(results)

рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ

19817 another_logger: <Logger demoЁЯЩВ (DEBUG)> [<StreamHandler <stderr> (NOTSET)>]
19817 (MainProcess) WARNING:demoЁЯЩВ:hello from 19817
<Logger demoЁЯЩВ (DEBUG)>

concurrent.futures demo...
19819 another_logger: <Logger demoЁЯЩВ (DEBUG)> [<StreamHandler <stderr> (NOTSET)>]
19819 (SpawnProcess-1) WARNING:demoЁЯЩВ:hello from 19819
19819 another_logger: <Logger demoЁЯЩВ (DEBUG)> [<StreamHandler <stderr> (NOTSET)>]
19819 (SpawnProcess-1) WARNING:demoЁЯЩВ:hello from 19819
[<Logger demoЁЯЩВ (DEBUG)>, <Logger demoЁЯЩВ (DEBUG)>]

joblib demo (<strong i="21">@amueller</strong>'s example #2)...
19823 another_logger: <Logger demoЁЯЩВ (WARNING)> []
hello from 19823
19823 another_logger: <Logger demoЁЯЩВ (WARNING)> []
hello from 19823
[<Logger demoЁЯЩВ (DEBUG)>, <Logger demoЁЯЩВ (DEBUG)>]

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

@mitar рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╢рд░реНрдд рд╣реЛ рд╕рдХрддреА рд╣реИред (рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ-рдЖрдзрд╛рд░рд┐рдд рдХрддрд╛рд░реЗрдВ, рдмрд▓реНрдХрд┐ рдЕрдВрддрд░-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрдЪрд╛рд░ рдХрддрд╛рд░реЗрдВ)

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ logging рдХреЗ QueueHandler / QueueListener рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ joblib рдФрд░ concurrent.futures рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдбрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣рд╛рдВ рдкрд╛рд▓рди рдХрд░реЗрдВрдЧреЗред

рдЖрдкрдХреЗ рдЕрдиреНрдп рд╕реБрдЭрд╛рд╡ рдХреЛ рднреА рдкрд╕рдВрдж рдХрд░реЗрдВ:

рд╕рд╛рде рд╣реА, рдПрдХ рдЪреАрдЬ рдЬреЛ рд▓реЙрдЧрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд▓реЙрдЧрд┐рдВрдЧ рд╕рдВрджреЗрд╢ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ред рддреЛ рдЙрдкрдпреЛрдЧреА рд╕рд╛рдорд╛рди рдХрд╛ рдкреВрд░рд╛ рдирд┐рд░реНрджреЗрд╢ред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рд╕реАрдЦрдиреЗ рдХреЗ рджреМрд░рд╛рди рдиреБрдХрд╕рд╛рди рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ, рдЖрдк рджреЛрдиреЛрдВ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдХреЛ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ: logger.debug("Current loss: %(loss)s", {'loss': loss}) ред рдореБрдЭреЗ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд░ рд╕реНрдХреЗрд▓реЗрд░ рдЗрд╕реЗ рднреА рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред

рдореИрдВрдиреЗ extra рдкрд░рдо рдФрд░ рдПрдХ рдХрд╕реНрдЯрдо рд╣реИрдВрдбрд▓рд░ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрд╛рдКрд╕реА рдорд┐рд╢реНрд░рдг рдореЙрдбрд▓рд┐рдВрдЧ рдХрд╛ рдПрдХ рджреГрд╢реНрдп рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рд░рд╛рдЬреНрдп рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд░рд╛рдЬреНрдп рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИред

joblib рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЛ рднреА рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдКрдкрд░ рджреЗрдЦрд╛ рд╣реИ ... рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬреИрд╕рд╛ рдХрд┐ рд╣реИ рдФрд░ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдПрдХ рдХрддрд╛рд░ рдЖрдзрд╛рд░рд┐рдд рдбрд┐рдЬрд╛рдЗрди рд╡реИрд╕реЗ рднреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реЛрдЧрд╛ред

QueueHandler рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдПрдХрдорд╛рддреНрд░ рд╕реАрдорд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА extra рд░рд╛рдЬреНрдп ( logger.debug("message", extra={...} ) рдпрд╣ рд╣реИ рдХрд┐ extra dict рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреНрд░рдордмрджреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рдХреЛрдИ numpy рд╕рд░рдгреА рдирд╣реАрдВред :/ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА QueueHandler/QueueListener рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдбрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ,

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

рд╕рд╛рде рд╣реА, рдЖрдкрдХреЛ extra рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ logger.debug("message %(foo)s", {'foo': 1, 'bar': 2}) рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

joblib рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рд╣рдордиреЗ QueueHandler / QueueListener , рддреЛ рд╣рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд▓ рдореЗрдВ рдХрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛? рдмрд╕ queue , рд╣реИ рдирд╛?

рд╕рд╛рде рд╣реА, рдЖрдкрдХреЛ extra рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ logger.debug("message %(foo)s", {'foo': 1, 'bar': 2}) рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж рд╣рд╛рдБред рдореБрдЭреЗ рд░рд╛рдЬреНрдп рдХреЛ рдкрд╛рда рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рднреА рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП extra рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рд░рдгреА рд╕рд╣рд┐рдд, рдФрд░ рдПрдХ рдЬреНрдпреВрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рд▓реЙрдЧрд┐рдВрдЧ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдбреЗрдЯрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди (рдПрдХ рддрд░рд╣ рд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд▓реЙрдЧрд┐рдВрдЧ) рдХрд░рдирд╛ред рдпрд╣ рд╕реНрдХреЗрд▓реЗрд░ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @rth рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЬреЙрдмрд▓рд┐рдм рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдордиреЗ QueueHandler/QueueListener рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд▓ рдореЗрдВ рдХрд┐рд╕ рд░рд╛рдЬреНрдп рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛? рдмрд╕ рдХрддрд╛рд░, рд╣реИ рдирд╛?

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реАрдорд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕рдорд░реНрдерди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЬреЙрдмрд▓рд┐рдм рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЙрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрджрд░ QueueHandler/QueueListener рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рдбрд┐рдХреВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рдВрдЧ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИред рддреЛ QueueHandler -> QueueListener -> рдХреЗрдВрджреНрд░реАрдп рд▓реЙрдЧрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХреЛ рднреЗрдЬреЗрдВред рд▓реЗрдХрд┐рди рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрддрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд░рд╛рдЬреНрдп рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рднреА рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ

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

@grisaitis FYI рдХрд░реЗрдВ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдХрдорд┐рдЯ рдореЗрдВ рдХрд┐рд╕реА рдирд╛рдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрдорд┐рдЯ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдЗрд╕реЗ рд░реАрдмреЗрд╕ рдХрд░рдирд╛ рдпрд╛ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░рдирд╛ рдпрд╛ рдЗрд╕реЗ рдкреБрд╢ рдХрд░рдирд╛), рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдПрдХ рдИрдореЗрд▓ рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ;)

рдЙрд╕ рдПрдВрдбреНрд░рд┐рдпрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦреЗрдж рд╣реИ! рдпрд╣ рд╢рд░реНрдордирд╛рдХ рд╣реИ... рдореИрдВ рд╕рд┐рд░реНрдл рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрдЪрдирд╛ рд╣реЛрдЧрд╛ред

рдЙрд╕ рд░реЗрдкреЛ рдореЗрдВ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХреИрд╕реЗ рдПрдХ QueueHandler/QueueListener рдХреЙрдореНрдмреЛ рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рдВрдЧ joblib рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИред рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред

рдкрд╣рд▓реЗ рдЪрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рд╕реНрдХреЗрд▓реЗрд░ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░реВрдВрдЧрд╛ рдЬрд╣рд╛рдВ joblib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдкрд╣рдирд╛рд╡рд╛ рдореЙрдбрд▓ рдореЗрдВ рд╕реЗ рдПрдХред рдПрдХ рдирдпрд╛ рдкреАрдЖрд░ рдЦреЛрд▓реЗрдВрдЧреЗред

рдЬреЙрдмрд▓рд┐рдм рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдордиреЗ QueueHandler / QueueListener рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ,

рд╣рд╛рдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдереНрд░реЗрдб (рдпрд╣рд╛рдВ QueueListener ) рдХреЛ рд╢реБрд░реВ/рдмрдВрдж рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ (https:// рдореЗрдВ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдЙрджрд╛рд╣рд░рдг: github.com/scikit-learn/scikit-learn/pull/16925#issuecomment-656184396

рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ "рдХрд╛рдо" рдХреЗ рдКрдкрд░ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рдерд╛ рдХрд┐ рдпрд╣ stdout рдкрд░ рдореБрджреНрд░рд┐рдд рдерд╛ рдЬреЛ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди рдерд╛ рдФрд░ print python3 рдореЗрдВ рдереНрд░реЗрдбрд╕реЗрдл рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ?

рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ "рдХрд╛рдо" рдХреЗ рдКрдкрд░ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рдерд╛ рдХрд┐ рдпрд╣ stdout рдкрд░ рдореБрджреНрд░рд┐рдд рдерд╛ рдЬреЛ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди рдерд╛ рдФрд░ рдкреНрд░рд┐рдВрдЯ python3 рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдореЗрдВ рдереНрд░реЗрдбрд╕реЗрдл рд╣реИ?

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

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

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

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

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

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

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

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