рдХрдореЛрдмреЗрд╢ рд╕рднреА рдЬрд╛рдирдХрд╛рд░ рдкрд╛рдпрдерди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬреАрдЖрдИрдПрд▓ рдЬреИрд╕реА рднрдпрд╛рдирдХ рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЕрд╡рд░реЛрдзрдХ рдЬрдм рддрдХ рдХрд┐ рдкрд╛рдпрдерди рдзрд╛рдЧреЗ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред рдпрд╣ рд╕рд╛рдзреБрддрд╛ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛рддреНрдордХ рддрд░реАрдХреЗ рд╕реЗ рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдбреЗрде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреЛрдИ рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЕрд╡рд░реЛрдзрди рд╕рдорд╛рди рд╣реИ, рдЬреЛ рд╕рдм рдХреБрдЫ рдЬреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдкреАрдбрд╝рд╛ рдореЗрдВ рдорд░ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╛рд░-рдмрд╛рд░ рдЬреАрдЖрдИрдПрд▓ рд▓реЙрдХ рдореЗрдВ рдЯрдХрд░рд╛рддрд╛ рд╣реИред
рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдЖрдЬ рддрдХ, рдЗрд╕ рд╢реЛрдХрдкреВрд░реНрдг рддрдереНрдп рдХреЗ рдХрд╛рд░рдг, C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗрд╡рд▓ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рд░реИрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рднреА рдХреЛ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдЪреНрдЫрд╛ рдЬреАрд╡рди рд╣реИред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ C ++ рдореЗрдВ рдПрдХ рдзрд╛рдЧрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрд┐рд╕реА рднреА GIL рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдмрд┐рдирд╛ рддрд╛рд▓реЗ рдФрд░ рдЦреБрд╢реА рдХреЗ рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдЖрдирдВрдж рджреВрд╕рд░реЗ рдереНрд░реЗрдб рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦрддреНрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдмреНрд▓реЙрдХ рдХрд┐рдП рдмрд┐рдирд╛ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЙрдЬреНрдЬрд╡рд▓ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдЧ рд╣реИ!
рдпрд╣ рдкрде рдореВрд▓ рд░реВрдк рд╕реЗ рдкрд░реНрд▓ рдЬреИрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдерд╛, рдпрд╣ рдкрд╛рдпрдерди рд╕реА-рдПрдкреАрдЖрдИ рдореЗрдВ рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрдВрддреНрд░ рдХреЛ рдорд╛рдирдХ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ! рд╡рд┐рдзрд┐ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкрд╛рдпрдерди рдЙрдк-рджреБрднрд╛рд╖рд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдХрдо рдХрд░рддреА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЬреАрдЖрдИрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ (!!!) рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╢рд░реНрдорд┐рдВрджрдЧреА рдФрд░ рдЬрд╛рджреВ рдХреЗ, рдмрд╕ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХреНрд░рдо рдореЗрдВ рдкрд╛рдпрдерди рд╕реА-рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдирдХ рд╕реЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ!
рдкрд╛рдпрдерди рдореЗрдВ рдИрдорд╛рдирджрд╛рд░ рдмрд╣реБрд╕реНрддрд░реАрдпрддрд╛
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рднреА рдкрд╛рдпрдерди 3.2 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдирдП рдЬреАрдЖрдИрдПрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдбреАрдмрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкрд╛рдпрдерди 3.3 рдкрд░ рдЪрд▓рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╡рд╣реА рдкрд╛рдпрдерди 2.7, рдЙрд╕реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ, рдЬреАрдЖрдИрдПрд▓ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрд╡рдпрдВ рдЙрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдЙрддреНрдкрдиреНрди рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕реЗ рдЗрд╕рдХрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдгред
рддреЛ, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕рдм рдХреБрдЫ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдзрд╛рдЧреЗ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рджреЗрд╢реА рдкрд╛рдпрдерди рдФрд░ рд╕реА ++ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рд╣рдо C ++ рд╕реЗ рд╕рдм рдХреБрдЫ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ :: рдЕрдЬрдЧрд░ рдФрд░ рдмрдврд╝рд╛рд╡рд╛ :: рдзрд╛рдЧрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдХреЛрдИ BOOST рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдпрджрд┐ рдЖрдк C ++ рдХреЗ рдмрдЬрд╛рдп рд╢реБрджреНрдз C рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдареАрдХ рд╣реИ, рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдХрд╛рд░реНрдп C рдореЗрдВ рд╣реИ, рдФрд░ BOOST рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рднреА рдХреЛ Python API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реБрджреНрдз C рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрдПрд╕ рдПрдкреАрдЖрдИред
рдкрд╛рдпрдерди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЖрдкрдХреЛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ, рдЬреАрдЖрдИрдПрд▓ рддрдВрддреНрд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рдЬреАрдЖрдИрдПрд▓ рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореБрдЦреНрдп рдереНрд░реЗрдб рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП:
Py_Initialize();
рдмреЗрд╢рдХ, рдЖрд░рдВрднреАрдХрд░рдг рдХрд╛ рдЕрд░реНрде рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рдирд╛ рднреА рд╣реИ, рдПрдХ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдФрд░ рдПрдХ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЬрд╣рд╛рдВ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдзрд╛рд░рд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреАрдЖрдИрдПрд▓ рдХреЛ рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреБрднрд╛рд╖рд┐рдП рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ (рдЙрдк-рджреБрднрд╛рд╖рд┐рдпреЛрдВ рдХреЗ рдХрд╛рдо рд╕рд╣рд┐рдд)
рдЕрдм рддрдХ, рд╕рдм рдХреБрдЫ рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдХрднреА рдкрд╛рдпрдерди рднрд╛рд╖рд╛ рдХреЗ C-API рд╕реЗ GIL рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рдореБрдЦреНрдп рд╕реВрддреНрд░ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ GIL рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдП рдмрд┐рдирд╛ рдФрд░ рд╢реЗрд╖ рдереНрд░реЗрдб рдХреЛ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдкреВрд░реА рдХрдХреНрд╖рд╛ рдХреЛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
class PyMainThread // { public: PyMainThread()
рджрд░рдЕрд╕рд▓, рдореБрдЦреНрдп рдпреЛрдЬрдирд╛ () рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЙрд╕рдХреЗ рдПрдирд╛рд▓реЙрдЧ рдореЗрдВ рдХрд╛рдо рдирд┐рдореНрди рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ:
PyMainThread main_thread;
рд╕рдм рдХреБрдЫ, рдЖрджрд┐рдорд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд, рд▓реЛрдЧ рдЬрд╛рджреВ рдХреЗ рд▓рд┐рдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ ... рдУрд╣ рд╣рд╛рдВ, рдореИрдВрдиреЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рд╣рд░ рд╕реВрддреНрд░ рдореЗрдВ рдХрд╛рдо рдХрд░реЛ
рдпрджрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЙрддреНрдкрдиреНрди рдзрд╛рдЧреЗ рдореЗрдВ рд╕рд┐рд░реНрдл time.sleep (1) рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдкрд░ рдПрдХ рдмреВрдВрдж рдорд┐рд▓реЗрдЧреАред
рд╣рдо рдЬрд╛рджреВ рдХреЗ рдХрд╛рд░реНрдп Py_NewInterpreter (!!!) рджреНрд╡рд╛рд░рд╛ рд╕рд╣реЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП GIL (!) рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдерд╛ рдХрд┐ GIL рдЖрддрд╛ рд╣реИ рдФрд░ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдк-рджреБрднрд╛рд╖рд┐рдпрд╛ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдк рдЕрдкрдиреА рдЬреАрдЖрдИрдПрд▓ рдХреЛ рдЬрд┐рддрдирд╛ рдЪрд╛рд╣реЗрдВ рдмреНрд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдареАрдХ 1 рдзрд╛рдЧреЗ рд╣реЛрдВрдЧреЗ - рдЬрд┐рд╕ рдореЗрдВ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:
mMainGilState = PyGILState_Ensure();
рдпрд╣ рднреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдирд┐рдореНрди рдХреЛрдб рдХреНрд░рдорд╢рдГ, рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдореЗрдВ:
PyGILState_Release( mSubGilState );
рдкреВрд░реА рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
class PySubThread // { public: PySubThread()
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛рд░реНрдп рдореБрдЦреНрдп рдереНрд░реЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЦрддрд░рдирд╛рдХ рдФрд░ рдЖрджрд┐рдо рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд▓рд╛рдн рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ рдЙрдк-рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЗрдВ рд╣рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдбреЗрдЯрд╛ рдХрд╛ рд▓рдЧрднрдЧ рдкреВрд░реНрдг рдЕрд▓рдЧрд╛рд╡ рдорд┐рд▓рддрд╛ рд╣реИ!
рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг
рддреЛ рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдХрд┐рддрдиреЗ рд╕рд╣реА рд╣реИрдВред рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдХреЛ C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╕реЛ:
#include <boost/python.hpp> #include <boost/thread.hpp> using namespace boost::python; using namespace boost::this_thread; using namespace boost::posix_time; void wait( double sec ) // , time.sleep Python { int msec = static_cast<int>( sec * 1000 ); // sleep( millisec( msec ) ); // } BOOST_PYTHON_MODULE( ctimer ) // boost::python ctimer { def( "wait", wait, args("sec") ); // Python ctimer.wait(sec) }
рдЕрдЧрд░ рд╣рдо рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╣реИрдВ рддреЛ рд╣рдо DLL рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ ctimer.pyd рдирд╛рдо рджреЗрддреЗ рд╣реИрдВред рд╣рдо рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк ctimer рдореЙрдбреНрдпреВрд▓ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рдо рдорд╛рдирдХ рд╕рдордп рдХреЗ рд╕рд╛рде ctimer.wait рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╕реЛ рдЬрд╛рдУред
рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрд╝реЗрджрд╛рд░ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ:
class ThreadWork // - boost::thread { public: ThreadWork( int id )
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдЖрдирдВрдж рд▓реЗрдВ! рдкрд╛рдпрдерди рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдереНрд░реЗрдбреНрд╕ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЫреЛрдЯреЗ рдкреЙрдб-рдкрд┐рдЪрд░реНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдирдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЬреАрдЖрдИрдПрд▓ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рд╣реБрд░реНрд░реЗ, рдХреЙрдорд░реЗрдбреНрд╕!
рд╕реНрд░реЛрдд рдХреЛрдб (рджреЛ рд╕рдВрдкреВрд░реНрдгред Cpp рдлрд╝рд╛рдЗрд▓реЛрдВ) рдФрд░ рд╕рдВрдХрд▓рд┐рдд DLL рдФрд░ EXEs рдХреЗ рд╕рд╛рде MSVS 2012 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд▓рд┐рдВрдХ Python 3.3 x64 рдХреЗ рд▓рд┐рдП
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (290 KB)рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ
рдкрд╛рдпрдерди рдЙрдк-рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛рдзрд╛рдЧреЗ, рджреБрднрд╛рд╖рд┐рдпрд╛ рдФрд░ рдЬреАрдЖрдИрдПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИBoost.Python рдкреНрд░рд▓реЗрдЦрдиBoost.Thread рдкреНрд░рд▓реЗрдЦрди