рдпрд╣ рдореЙрдбрд▓ рдПрдкреАрдЖрдИ рдореЗрдВ рд╕реНрдЯрдбрдЖрдЙрдЯ рдФрд░ рд╡рд░реНрдмреЛрдЬрд╝ рдлреНрд▓реИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкрд╛рдпрдерди рдХреЗ рд▓реЙрдЧрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред
рд▓реЙрдЧрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХрд┐рдХрд┐рдЯ рдХреА рд╡рд╛рдЪрд╛рд▓рддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕ рдкрд░ 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
рд╕рд╛рде рдХреБрдЫ рдЕрдиреБрднрд╡ рд╣реИ рдФрд░ рдЕрдЧрд░ рдХреБрдЫ рдЖрдо рд╕рд╣рдорддрд┐ рдФрд░ рдпреЛрдЬрдирд╛ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддреА рд╣реИ рддреЛ рдпрд╣рд╛рдВ рдПрдХ рд╡реГрджреНрдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред
рдпрд╣рд╛рдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
verbose
рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрджреЗрд╢ рдХрд╛ рд╕реНрддрд░ рдмрджрд▓реЗрдВ if verbose:
logger.debug(message)
else:
logger.info(message)
logger
. рдХреЗ рдЖрдзрд╛рд░ рдкрд░ verbose
рдХреЗ рд╕реНрддрд░ рдХреЛ рдмрджрд▓реЗрдВ if verbose:
logger.selLevel("DEBUG")
DEBUG
рд╕рд╛рде рдПрдХ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ if verbose:
verbose_handler = logging.StreamHandler()
verbose_handler.setLevel("DEBUG")
logger.addHandler(verbose_handler)
рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░:
рд╡рд┐рдХрд▓реНрдк 1 рдпрд╛ рд╡рд┐рдХрд▓реНрдк 4 рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
logging
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИlogging
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ sklearn logging
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрд╡рдпрдВ logging
рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП import logging; logging.getLogger("sklearn").setLevel("DEBUG")
ред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 рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдореЗрдВ рдереНрд░реЗрдбрд╕реЗрдл рд╣реИ?
рдкреНрд░рд┐рдВрдЯ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рд╡реЗ рд╕рд┐рд░реНрдл рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрднрд╡рдд: рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рдкрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕рдВрджреЗрд╢ рдХрднреА-рдХрднреА рдЕрдВрддрдГрд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд░реЗрдЦрд╛рдПрдВ рдорд┐рд╢реНрд░рд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐
verbose
рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдХреЗрд╡рд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдЦреЛрдЬрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рджреЗрдЧрд╛ред