Celery: рдЙрдкрдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 29 рдирд╡ре░ 2013  ┬╖  68рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: celery/celery

рд╕реЗрд▓реЗрд░реА 3.1.0 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреВрд▓ ( celery.concurrency.prefork , рдкреВрд░реНрд╡ celery.concurrency.processes ) рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдореЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред

рдбреЗрдорди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, multiprocessing рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

[2013-11-29 14:27:48,297: ERROR/MainProcess] Task app.add[e5d184c0-471f-4fc4-804c-f760178d4847] raised exception: AssertionError('daemonic processes are not allowed to have children',)
Traceback (most recent call last):
  File "/Users/aromanovich/Envs/celery3.1/lib/python2.7/site-packages/celery/app/trace.py", line 218, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/Users/aromanovich/Envs/celery3.1/lib/python2.7/site-packages/celery/app/trace.py", line 398, in __protected_call__
    return self.run(*args, **kwargs)
  File "/Users/aromanovich/Projects/celery/app.py", line 10, in add
    manager = multiprocessing.Manager()
  File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/__init__.py", line 99, in Manager
    m.start()
  File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/managers.py", line 524, in start
    self._process.start()
  File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 124, in start
    'daemonic processes are not allowed to have children'

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

@ рдбреЗрдбрдмреНрд░реЛ
рдЖрдкрдиреЗ рдЧрд▓рдд рд╕рдордЭрд╛ред рджреЛ рдмрд╛рд░ред
рд╣рдорд╛рд░реА рдЪрд┐рдВрддрд╛ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИрдВ (рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдФрд░ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ, рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓рд╛ рд╣реИ)ред рд╣рдорд╛рд░реА рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рд╡рдЬрд╣ рд╕реЗ рдЯрд┐рдХрдЯ рдмрдВрдж рд╣реИ, рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЯрд┐рдХрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╣рдо 'рджреБрдЦреА' рдирд╣реАрдВ рд╣реИрдВ, рд╣рдо рд╕реНрддрдмреНрдз рд╣реИрдВред

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

рдпрд╣ 3.0 рдФрд░ 3.1 рдХреЗ рдмреАрдЪ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдм рдЖрдкрдХреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рдорд┐рд▓реЗрдЧреА рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВред

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

app.py:

import multiprocessing
from celery import Celery

app = Celery(__name__, broker='amqp://192.168.33.40')
@app.task
def f():
    manager = multiprocessing.Manager()

sendtask.py:

import app

app.f.delay()

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ: celery worker -A app.app -l debug ред

рдЕрдЬрд╡рд╛рдЗрди рдХреЗ рд╕рд╛рде 3.0.24 рдХрд╛рд░реНрдп рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ:

[2013-12-02 20:43:56,454: INFO/MainProcess] Task app.f[bcaab028-dbec-43a8-9259-ff7c35ff13d0] 
succeeded in 0.0169339179993s: None

рдЕрдЬрд╡рд╛рдЗрди 3.1.5 рдХреЗ рд╕рд╛рде рдпрд╣ рдирд╣реАрдВ рд╣реИ:

[2013-12-02 20:48:38,946: ERROR/MainProcess] Task app.f[c9f1cdd3-ae38-493e-b7c7-b9636ed473d0] 
raised exception: AssertionError('daemonic processes are not allowed to have children',)

рдореБрджреНрджреЗ рдХреА рдореЗрд░реА рд╕рдордЭ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ: celery.concurrency.prefork.TaskPool celery.concurrency.asynpool.AsynPool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ; AsynPool billiard.pool.Pool рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛, рдЬреЛ рдбреЗрдорди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЬрдиреНрдо рджреЗрддрд╛ рд╣реИ рдФрд░ AsynPool рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдпреЛрдЬрдирд╛ 3.0 рдФрд░ 3.1 рдХреЗ рдмреАрдЪ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рднреА рднреНрд░рдорд┐рдд рд╣реВрдБ :)

рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдВ: http://stackoverflow.com/questions/20149421/threads-in-celery-3-1-5

рдПрдХ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдм 'рдкреНрд░рдХреНрд░рд┐рдпрд╛' рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рд╣реИ, рдЬрд╣рд╛рдВ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: Process(target=) , рд╢рд╛рдпрдж рдЗрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдореЗрдВ рдЕрдВрддрд░ рд╣реИред

рдмрд╣реБрдкреНрд░рдЪрд▓рд┐рдд рдФрд░ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмрд┐рд▓рд┐рдпрд░реНрдб рд╕реЗрдЯ daemon=True :
https://github.com/celery/billiard/blob/2.7/billiard/pool.py#L904

рдФрд░ рдпрд╣ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдорд╛рди рд╣реИ:
https://github.com/celery/billiard/blob/3.3/billiard/pool.py#L1039

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдбреЗрдореЙрди рд╣реИ рдЬреЛ рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрдВрднреАрд░ рд╕реАрдорд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреА рд╣реИред
рдореИрдВрдиреЗ рдПрдХ рдХрд╛рд░реНрдп рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рд╕реАрдкреАрдпреВ-рдмрд╛рдЙрдВрдб рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдореИрдВ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдПрдХ рд╢реНрд░рдорд┐рдХ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

рдЕрдЬрд╡рд╛рдЗрди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ --app = рдХрд╛рд░реНрдп -Q wb -l рдЬрд╛рдирдХрд╛рд░реА --concurrency = 1

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

рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИред
рдХрд╛рд░реНрдп 3.0 рдФрд░ 3.1 рджреЛрдиреЛрдВ рдореЗрдВ рдбреЗрдореЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдЕрдЬрд╡рд╛рдЗрди / рдмрд┐рд▓рд┐рдпрд╛рд░реНрдб @ 4c32d2e рдФрд░ https://github.com/celery/billiard/commit/c676b94aa4144b4b9b11ab31c82296a5d804909c9 multiprocessing рдореЙрдбреНрдпреВрд▓ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд░рд╣рд╛ рдерд╛ред

рдореЗрд░реА рд╕рдордЭ рдореЗрдВ, рд╕рдВрд╕реНрдХрд░рдг 3.1 рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдмрдЧ рдерд╛ (рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрдкрдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рдереА, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдирд╛рде рд░рд╛рдЬреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдФрд░ рдЕрдм рдпрд╣ рдмрдЧ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИред

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

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

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

@ рдорд╛рд╕реНрдХ , рдХреНрдпрд╛ рдбреЗрдореЙрди рдлреНрд▓реИрдЧ рдХреЗ рд╕рд╛рде рдЕрдЬрд╡рд╛рдЗрди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛? рдпрд╛ рдЗрд╕реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рдмрдирд╛рддреЗ рд╣реИрдВ?

@ilyastam рд▓рдЧрддрд╛ рд╣реИ рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд░рд╣реЗ рдереЗ

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдордирдорд╛рдирд╛ рд╕реАрдорд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд╢ рдореИрдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдкреАрдЫреЗ рддрд░реНрдХ рдХреЛ рдЬрд╛рдирддрд╛ рдерд╛ред

рдпрд╣ рдкреЙрдЬрд╝рд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдЬрд╛рдирд╛-рдорд╛рдирд╛ рдиреБрдХрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдЖрдк рдПрдХ рд╕рд┐рдЧреНрдирд▓ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рд╛рдл рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ SIGKILL рдХреЗ рдЦрд┐рд▓рд╛рдл рдЖрдкрдХреА рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдмрд┐рд▓рд┐рдпрд╛рд░реНрдб рд╕реЗ рд╕реАрдорд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдпрд╣ рдмрд╣реБ-рд╡реНрдпрд╡рд╣рд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдЕрд▓рдЧ рд╣реЛред рдЖрдк рдЕрднреА рднреА subpocess рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рдирд┐рдореНрди рд╕реНрддрд░ fork рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмрд┐рдЬрд▓реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ billiard.Process рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рдСрд▓рд╕реНрдЯреИрдо рдХреЛ рдЙрдард╛рдирд╛ рдмрдпрд╛рди рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ "рдЧреИрд░-рдбреЗрдореЙрди" рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

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

Btw, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ raise , рдпрд╣ рдПрдХ рдореБрдЦрд░ рдХрдерди рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдЕрдЬрдЧрд░ рдХреЛ PYTHONOPTIMIZE envvar рдпрд╛ -O рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣рд┐рдд рдмрд┐рд▓рд┐рдпрд╛рд░реНрдб 3.3.0.11 PyPI рдкрд░ рд╣реИ

@ рдХрд╛ рд╢реБрдХреНрд░рд┐рдпрд╛ред рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдЕрдЬрд╡рд╛рдЗрди рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдпрд╣ рд╕реБрдзрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛?

multiprocessing рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдбреЗрдорди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрдкрдкреНрд░реЛрд╕реЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ рдФрд░ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВред рдореЗрд░реЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ assert рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЕрдзрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕реЗ raise (рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ) рдХреЗ рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣рд╛рдБ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╣ рд╕реАрдорд╛ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЕрдЬрд╡рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдЪреБрдкрдЪрд╛рдк рдмрдВрджрд░-рдкреИрдЪ multiprocessing рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рдЗрд╕реЗ рджреВрд░ рд▓реЗ рдЬрд╛рдПрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдФрд░ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рдкрд░рд┐рдгрд╛рдо рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ (рдпрд╣ рдереЛрдбрд╝рд╛ рд╡рд┐рдкрд░реАрдд рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐):

@app.task
def f():
    p = multiprocessing.Pool(3)
    p.map_async(time.sleep, [1000, 1000, 1000])

рдкреНрд▓реЗрди рдкрд╛рдпрдерди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдХреЛрдб рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдЕрдЬрд╡рд╛рдЗрди рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдЕрдЬрд╡рд╛рдЗрди рд╕рдВрд╕реНрдХрд░рдг 3.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред *), рдпрд╣ рддреАрди рдЙрдкрдкреНрд░рдХрд╛рд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд▓рдЯрдХ рдЬрд╛рдПрдЧрд╛; рдЬрдм рд╕реЗрд▓реЗрд░реА рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдмреБрдЭреЗрдЧрд╛, рддреЛ рдпреЗ рдЙрдкрдкреНрд░рдХрд╛рд░ рдЕрдирд╛рде рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐, рдпрд╣ рд╕рд┐рд░реНрдл рдпреВрдирд┐рдХреНрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдмрдЪреНрдЪреЗ-рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗред рднрд▓реЗ рд╣реА рдпрд╣ рдпреВрдирд┐рдХреНрд╕ рдореЗрдВ рдПрдХ рдмрджрдирд╛рдо рд╕реАрдорд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ
рдПрдХ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП subprocess.Popen рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдирд╛, рдпрд╛ fork() рдХреЙрд▓ рдХрд░рдирд╛ред рддреЛ рдпрд╣ рдЕрд╡реИрдз рдХреНрдпреЛрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЕрдкрдирд╛ рдЙрджрд╛рд╣рд░рдг рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛:

from billiard import Pool
from multiprocessing.util import Finalize

_finalizers = []

@app.task
def f():
    p = billiard.Pool(3)
    _finalizers.append(Finalize(p, p.terminate))
   try:
       p.map_async(time.sleep, [1000, 1000, 1000])
       p.close()
       p.join()
   finally:
       p.terminate()

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

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рдХреЗрд╡рд▓ рдмрд┐рд▓рд┐рдпрд░реНрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рдХреЗрд╡рд▓ рдмрд┐рд▓рд┐рдпрд░реНрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реИред

"рдордВрдХреА рдкреИрдЪрд┐рдВрдЧ" рд╕реЗ рдореЗрд░рд╛ рддрд╛рддреНрдкрд░реНрдп рдЗрд╕ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╕реЗ рд╣реИ, рдЬреЛ multiprocessing._current_process рдХреЛ billiard.process.Process рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдмрджрд▓рддрд╛ рд╣реИ: https://github.com/celery/billiard/blob/master/billiard-process.py # рдПрд▓ 53ред

рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдмрд╛рд▓-рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ)ред рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ multiprocessing рдХреЛ рдЗрд╕ рддрд░рд╣ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП _ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди / рд╕реАрдорд╛рдПрдБред

@aromanovich рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛

рдпрд╣ _current_process рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд▓реЙрдЧрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ processName рд╕реНрд╡рд░реВрдк рдЪрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд┐рд▓рд┐рдпрд░реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрд╣реБрдкреНрд░реЛрд╕реЗрд╕рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдорд╛рди API рд╣реИ рддрд╛рдХрд┐ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛред

рдФрд░ btw, рдЖрдкрдХреЛ рд╕реАрдорд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓рд┐рдпрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрднреА рднреА рдЕрдкрд╡рд╛рдж рдХреЛ рдмрдврд╝рд╛рдПрдЧрд╛ред

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рднреА рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
http://stackoverflow.com/questions/6974695/python-process-pool-non-daemonic
рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:
https://github.com/celery/billiard/issues/99

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

@celery.task
def dostuff():
   execute(fabfile.push_settings, sid=site['sid'])

<strong i="7">@parallel</strong>
@roles(environment)
def push_settings(sid):
  #do stuff

@frodopwns ENV рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
рдирд┐рд░реНрдпрд╛рдд PYTHONOPTIMIZE = 1
рдЗрд╕ рдЬреЛрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдЖрдкрдХреЛ рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@xiaods рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ:

@worker_process_init.connect
def configure_workers(sender=None, conf=None, **kwargs):
    Crypto.Random.atfork()

рд╕рдВрдХрдЯ

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

[2015-07-17 21:23:51,299: ERROR/MainProcess] Task app.f[329d0da4-2e0e-4e1f-8148-d64f47750b1f] raised unexpected: AttributeError("'Worker' object has no attribute '_config'",)
Traceback (most recent call last):
  File "/home/username/anaconda3/lib/python3.4/site-packages/celery/app/trace.py", line 240, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/home/username/anaconda3/lib/python3.4/site-packages/celery/app/trace.py", line 438, in __protected_call__
    return self.run(*args, **kwargs)
  File "/home/username/working/playground/celery/app.py", line 11, in f
    clf = pickle.load(open('clf.pickle', 'rb'))
  File "/home/username/anaconda3/lib/python3.4/site-packages/sklearn/ensemble/__init__.py", line 6, in <module>
    from .base import BaseEnsemble
  File "/home/username/anaconda3/lib/python3.4/site-packages/sklearn/ensemble/base.py", line 13, in <module>
    from ..externals.joblib import cpu_count
  File "/home/username/anaconda3/lib/python3.4/site-packages/sklearn/externals/joblib/__init__.py", line 112, in <module>
    from .parallel import Parallel
  File "/home/username/anaconda3/lib/python3.4/site-packages/sklearn/externals/joblib/parallel.py", line 23, in <module>
    from ._multiprocessing_helpers import mp
  File "/home/username/anaconda3/lib/python3.4/site-packages/sklearn/externals/joblib/_multiprocessing_helpers.py", line 25, in <module>
    _sem = mp.Semaphore()
  File "/home/username/anaconda3/lib/python3.4/multiprocessing/context.py", line 81, in Semaphore
    return Semaphore(value, ctx=self.get_context())
  File "/home/username/anaconda3/lib/python3.4/multiprocessing/synchronize.py", line 127, in __init__
    SemLock.__init__(self, SEMAPHORE, value, SEM_VALUE_MAX, ctx=ctx)
  File "/home/username/anaconda3/lib/python3.4/multiprocessing/synchronize.py", line 59, in __init__
    kind, value, maxvalue, self._make_name(),
  File "/home/username/anaconda3/lib/python3.4/multiprocessing/synchronize.py", line 117, in _make_name
    return '%s-%s' % (process.current_process()._config['semprefix'],
AttributeError: 'Worker' object has no attribute '_config'

рдкреНрд░рдЬрдирди рдХрд░рдирд╛

рдПрдХ рдЦрд╛рд▓реА рдХреНрд▓рд╛рд╕рд┐рдлрд╝рд╛рдпрд░ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЕрдЪрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ:

import pickle
from sklearn.ensemble import GradientBoostingClassifier
clf = GradientBoostingClassifier()
pickle.dump(clf, open('clf.pickle', 'wb'))

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдРрдк рдмрдирд╛рдПрдВ ( app.py ):

import pickle
import sklearn
from celery import Celery

app = Celery(__name__, broker='amqp://localhost//')

@app.task
def f():
    print('hello')
    clf = pickle.load(open('clf.pickle', 'rb'))
    print(clf)

рдЕрдЬрд╡рд╛рдЗрди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╢реБрд░реВ рдХрд░реЗрдВ:

celery -A app worker --loglevel=debug

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдБ:

python -c "from app import f; f.delay()"

рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢:

...
AttributeError: 'Worker' object has no attribute '_config'

рд╕рдорд╛рдзрд╛рди

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдк-рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП "рдордВрдХреАрдХреИрдЪ" рдЕрдЬрд╡рд╛рдЗрди рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдЕрддреАрдд рдореЗрдВ рдРрд╕реА "рд╕реБрд╡рд┐рдзрд╛" рдореМрдЬреВрдж рдереАред рдЕрднреА, рдЬрдм рд▓реЛрдЧ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдЧ рдмрд╕ рджреВрд╕рд░реЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ: http://stackoverflow.com/questions/27904162/use-multiprocessing-pool-from-celery-task-raises-exceptionред рдпрд╣рд╛рдБ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ: http://stackoverflow.com/questions/22674950/python-multiprocessing-job-to-celery-task-but-attributeerrorред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ...

рдореИрдВ рдмрд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдореИрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдЕрдВрджрд░ nltk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ scikit-learn рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕реА рддреНрд░реБрдЯрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ @ostrokach рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ:

from celery.signals import worker_process_init

@worker_process_init.connect
def fix_multiprocessing(**kwargs):
    from multiprocessing import current_process
    try:
        current_process()._config
    except AttributeError:
        current_process()._config = {'semprefix': '/mp'}

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдмрд╣реБрдд рд╣реА рдХреНрд░реВрдб рд╣реИрдХ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ (рдмрд┐рд▓реНрд▓реА рдореБрдЭреЗ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ semprefix рд╣реИ) рд▓реЗрдХрд┐рди рдпрд╣ scikit-learn рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ

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

рдХреНрдпрд╛ рдпрд╣ рдЕрдЬрдЧрд░ 3 рдкрд░ рдмрд┐рд▓рд┐рдпрд░реНрдб рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЕрд╕рдВрдЧрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ? рдпрд╛ рдпрд╣ рдЕрдЬрдЧрд░ 2 рдкрд░ рднреА рдкреНрд░рдЬрдирди рдпреЛрдЧреНрдп рд╣реИ?

рдХреНрдпрд╛ рдЕрдЬрд╡рд╛рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдореВрд▓ рдореБрджреНрджрд╛ рдЕрднреА рднреА рдПрдХ рдЙрдкрдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ? рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреАрдЫреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ 3.3 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдЬрд╡рд╛рдЗрди / рдмрд┐рд▓рд┐рдпрд░реНрдб @ e6bb0f7 рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдмрд╛рдж рдХреЗ рдПрдХ рдХрдореЗрдЯреА (рд╕реЗрд▓реЗрд░реА / рдмрд┐рд▓рд┐рдпрд╛рд░реНрдб @ c7eedbd0ee1498e76d4fa1affac5b1a275660ee7) рдиреЗ рдкреНрд░рд╛рд░рдВрдн рд╡рд┐рдзрд┐ рдореЗрдВ 3.4 рдХреЗ рд╕рдорд╛рди рдмрд╣реБрдд рд╣реА рдЬреЛрд░рджрд╛рд░ рдмрдпрд╛рди рджрд┐рдпрд╛ред рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм рд╕реЗ рдореИрдВ 3.3 рдкрд░ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@martinth рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рд╣реИрдХ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

@xiaods рдзрдиреНрдпрд╡рд╛рдж! рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдзрдиреНрдпрд╡рд╛рдж!

@gilinson рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ рдФрд░ PYTHONOPTIMIZE = 1 рдЕрднреА рднреА "рдереЛрджрд╛ рдлрд┐рдХреНрд╕" рдЗрд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред
рдмрд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рд╕реЗрд▓реЗрд░реА рдХрд╛рд░реНрдп рдореЗрдВ ansible playbook рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ

@ рд╕реНрдорд╛рд░реНрдЯрдерд┐рди рд╣реИрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЙрд╕реА рдореБрджреНрджреЗ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВ:

  • рдЕрдЬрдЧрд░ 3.4.3
  • рдЕрдЬрд╡рд╛рдЗрди == 3.1.18
  • scikit-learn == 0.17

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

рдереНрд░реЗрдб-рдЖрдзрд╛рд░рд┐рдд рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

from multiprocessing.dummy import Pool

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

рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИрдВред

рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдерд┐рддрд┐"

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

рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдЯрд┐рдХрдЯ рдХреНрдпреЛрдВ рдмрдВрдж рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЯрд┐рдХрдЯ рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рддреБрдо рдмрд╕ рдмрдЧ рдХреЛ рдЫрд┐рдкрд╛ рд░рд╣реЗ рд╣реЛред

рдЬреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рдЧрдВрднреАрд░рддрд╛ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП "рдХреНрд░рд┐рдЯрд┐рдХрд▓" рд▓реЗрдмрд▓ рд╡рд╛рд▓реЗ рдЯрд┐рдХрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рд╣реИред

@orzel +1ред
рдкреНрд░рд╛рдердорд┐рдХрддрд╛: рдорд╣рддреНрд╡рдкреВрд░реНрдг
рдЧрдВрднреАрд░рддрд╛: рдорд╣рддреНрд╡рдкреВрд░реНрдг
рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИрдВред

рд╡рд╣ рдПрдХ рдордЬрд╛рдХ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИрдВ - рддреЛ рдЕрдм рдЗрд╕реЗ рдареАрдХ рди рдХрд░реЗрдВред рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдВрд╕рд╛рдзрди рд╣реЛрдВрдЧреЗред рдЯрд┐рдХрдЯ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рджреВрд░ рдирд╣реАрдВ рд╣реЛрдЧреА

@orzel @Templarrr рдореИрдВрдиреЗ рдЗрд╕ рдЯрд┐рдХрдЯ рдХреЛ рдХреНрд░рд┐рдЯрд┐рдХрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП @ask рдпрд╣рд╛рдВ рджреЛрд╖ рдирд╣реАрдВ рд╣реИред
рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рджреБрдЦреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд░реЛрдз рдХрд░рдиреЗ рд╕реЗ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред
рд╣рдореЗрдВ рдЕрдкрдиреЗ рдмреИрдХрд▓реЙрдЧ рдХреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдард┐рди рдХреЙрд▓ рд╣реИ рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЛ рдЗрд╕реЗ рдмрдирд╛рдирд╛ рд╣реИред
рдпрджрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЖрдкрдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдореИрдВ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рдлрд┐рдХреНрд╕ рд╕рд╣реА рд╣реИ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдкрдпреБрдХреНрдд рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рддреЛ рдореИрдВ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░ рджреВрдВрдЧрд╛ред

@ рдбреЗрдбрдмреНрд░реЛ
рдЖрдкрдиреЗ рдЧрд▓рдд рд╕рдордЭрд╛ред рджреЛ рдмрд╛рд░ред
рд╣рдорд╛рд░реА рдЪрд┐рдВрддрд╛ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИрдВ (рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдФрд░ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ, рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓рд╛ рд╣реИ)ред рд╣рдорд╛рд░реА рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рд╡рдЬрд╣ рд╕реЗ рдЯрд┐рдХрдЯ рдмрдВрдж рд╣реИ, рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЯрд┐рдХрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╣рдо 'рджреБрдЦреА' рдирд╣реАрдВ рд╣реИрдВ, рд╣рдо рд╕реНрддрдмреНрдз рд╣реИрдВред

рдореИрдВ рднреА рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рдЕрд╕рд╣рдордд рд╣реВрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ _is_ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИред рдФрд░ рдЬрдм рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреБрдГрдЦрдж рд╣реИ рдХрд┐ рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИрдВ, рддреЛ _definite_ рдмрдЧ рдЗрд╕рдХреА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЖрдк рд╕рдВрднрд╡рддрдГ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╢рд╛рдпрдж рдХрд▓ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЖрддрд╛ рд╣реИ рдФрд░ рд╕реЛрдЪрддрд╛ рд╣реИ "рд╕реЗрд▓рд░реА рдореЗрдВ рдХреБрдЫ рдХреАрдбрд╝реЗ рдареАрдХ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ" рдмрд╕ рдЦреБрд▓реЗ рдореБрджреНрджреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реЛрдЪрддрд╛ рд╣реИ "рдареАрдХ рд╣реИ, рдпрд╣рд╛рдБ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рдирд╣реАрдВ рд╣реИ ... рдЪрд▓реЛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп _OtherProject_ рдкрд░ "ред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рдЗрд╕реЗ рдвреВрдВрдврдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдЧрд┐рддреБрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдореБрдЭреЗ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдЦреБрд▓реЗ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдЯреНрд░реИрдХрд░ рдЦреЛрдЬрддрд╛ рд╣реВрдВред рдЖрдо рддреМрд░ рдкрд░ рдмрд╣реБрдд рдЪрд░реНрдЪрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдХрднреА рднреА рдХреЛрдИ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ) рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдХреЗрд╡рд▓ рдЕрдЧрд░ рдореБрдЭреЗ _really_ рд╣рддрд╛рд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдмрдВрдж рдореБрджреНрджреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред

рдпрд╣ "рдмреИрдХрд▓реЙрдЧ рдЧреНрд░реВрдорд┐рдВрдЧ" рдирд╣реАрдВ рд╣реИ рдпрд╣ рдирдВрдмрд░ рдЯреНрд╡рд┐рдХрд┐рдВрдЧ рд╣реИред рдЕрдЧрд░ рдореИрдВ I _do_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рддреЛ рдЦреБрд▓реЗ рдЕрдВрдХ рдХреА рдЧрд┐рдирддреА рдХреЛ рджреЗрдЦреЗрдВ рд▓реЗрдХрд┐рди рдореИрдВ рд╣рдореЗрд╢рд╛ рд╕реНрдЯрд╛рд░ рдХреА рдЧрд┐рдирддреА (рдЬреЛ рдХрд┐ рдЕрдЬрд╡рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ) рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЕрдкреАрд▓ рдХреЗ рд▓рд┐рдП рдХрдо рдмрдЧ рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рд▓рд┐рдП рднреАред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ "250 рдЦреБрд▓реЗ рдореБрджреНрджреЗ" рджреЗрдЦрдирд╛ рдПрдХ рдЕрдЪреНрдЫреА рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рднрд╛рд░реА рд▓рдЧрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдЧрд▓реЗ рдорд╣реАрдиреЗ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд░реНрд╖) рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реНрд░рдорд╢рдХреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдареАрдХ рд╣реИ_ред рдмрд╕ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИред рдПрдХ рдХрд░реАрдмреА рддрднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╕рдорд╕реНрдпрд╛ рдпрд╛ рддреЛ рд╣реЛ рдпрд╛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ _never_ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рджреЛрдиреЛрдВ рд╣реА рдпрд╣рд╛рдВ рдирд╣реАрдВ рд╣реИрдВред

рдмрд╕ "рдХреНрд░рд┐рдЯрд┐рдХрд▓" рдЭрдВрдбреЗ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП "рд╕реНрдердЧрд┐рдд" рдзреНрд╡рдЬ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдЕрдм рд╕рдВрднрд╛рд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╕рдВрд╕рд╛рдзрди _are_ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдЙрд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдпрд╣ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рдХрд┐ рдпреВрдирд┐рдХреНрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдмрдВрдз рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдкреИрдЪ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдЬрдорд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╢рд╛рдпрдж рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдордВрдЪ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рд╢реЛрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рдХреЗ рдмрд┐рдирд╛ 2 рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд┐рдХрдЯ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рддрдп рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ 200+ рдореБрджреНрджреЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдФрд░ 30k рд╕реЗ рдЕрдзрд┐рдХ рдИрдореЗрд▓реЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрдврд╝рд╛ред рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рджреЛрд╖ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдпрджрд┐ рд╡рд╣ рдПрдХрдорд╛рддреНрд░ рдЬреНрдЮрд╛рдд рд╡рд┐рдХрд▓реНрдк рд╣реИред

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

рдЪрд▓реЛ рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рддрдереНрдп рд╣реИ рдХрд┐ "рдпрджрд┐ рдЖрдк рдПрдХ рдЕрдЬрд╡рд╛рдЗрди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдХрдо рд╕реЗ рдХрдо рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ ... рд╣рдореЗрд╢рд╛ рдРрд╕реЗ рд▓реЛрдЧ рд╣реЛрдВрдЧреЗ рдЬреЛ рдЗрд╕реЗ рдирд╣реАрдВ рдкрдврд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЖрдк рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ "рджреЗрдЦреЗрдВ, рдпрд╣ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИред рд╣рдо рдЗрд╕реЗ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдирд┐рдкрдЯреЗрдВред"

рдореЗрд░реА рдЯреВрдбреВ рд╕реВрдЪреА рд╡рд┐рд╢рд╛рд▓ рд╣реИ, рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕реАрдзреЗ рдЕрдм github рдкрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрди рдЬреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ: (

рдореИрдВ рдореБрджреНрджреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдХреЛрдбрд╝рд╛ рдорд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

@ рдорд╛рд╕реНрдХ рдХреНрдпрд╛ рд╣рдо django рдореЗрдВ рдЕрдЬрд╡рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рдЕрдВрджрд░ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИ?

@abhisheksachan рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╡рд╛рд▓ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╕рдм рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП

@abhisheksachan рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЖрдЬрд╝рдорд╛рдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ https://pypi.python.org/pypi/billiard рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рдкрд╛ рд▓рд┐рдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ рдХреЗ рдбреЗрдордиреАрдЬрд╝реЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 'рдмрд╣реБрдкреНрд░рдЪрд╛рд░' рд╕реЗ рдЖрдпрд╛рдд рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

from multiprocessing import Process

->

from billiard import Process

рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реАрдорд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рд╡реИрд╕реЗ рднреА рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╣рдорд╛рд░рд╛ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛рдВрдЯрд╛ рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХреЗред

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

рдУрдкреА рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

app = Celery(__name__, broker='amqp://192.168.33.40') 
@app.task
def f():
    manager = multiprocessing.Manager()

рд╕рд╛рде рд╕реЗ:

app = Celery(__name__, broker='amqp://192.168.33.40')
@app.task
def f():
    process = subprocess.Popen(["program"]) # or the newer post 3.5 run version
    process.wait()
    # analyze exit code

рдФрд░ "рдХрд╛рд░реНрдпрдХреНрд░рдо" (POSIX рдпреВрдирд┐рдХреНрд╕ / рд▓рд┐рдирдХреНрд╕ рдордВрдЪ рдХреЗ рддрд╣рдд) рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛

import os

def main():
      manager = multiprocessing.Manager()

# this is equivalent to "(cmd )&" under bash
pid = os.fork()
if pid == 0:
    cpid = os.fork()
    if cpid == 0:
        main()
    else:
        exit(0)
else:
    os.wait(pid)

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

рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо рдЙрд╕ рд╕реАрдорд╛ рдХреЛ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдбреЙрдХ рдореЗрдВ рдЪрд╛рд░реЛрдВ рдУрд░ рджреЗрдЦрд╛ рдФрд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рдлрд┐рд░ рд╕реЗ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

рдкрд╛рдпрдереЙрди 3.5.2, рд╕реЗрд▓реЗрд░реА 4.0.0 рдФрд░ рдмрд┐рд▓рд┐рдпрд╛рд░реНрдб 3.5.0 рдкрд░ @ рд╕реНрдорд╛рд░реНрдЯрдорд┐рдВрдЯ рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рдж , рдЙрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╣реБрдЙрджреНрджреЗрд╢реАрдп рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

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

@worker_process_init.connect
def fix_multiprocessing(**kwargs):
    # don't be a daemon, so we can create new subprocesses
    from multiprocessing import current_process
    current_process().daemon = False

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

@miraculixx рдЗрд╕ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рдлрд▓ рдореЛрдб рдФрд░ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдБ

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣ daemonic processes are not allowed to have children рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рджрд░реНрдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЖрдк рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдП рдЬрдм рдЖрдкрдХреЛ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирдпрд╛ рд╕реНрд╡рд░реВрдк рджреЗрдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдУрдПрд╕ рд╕реНрддрд░ рдХреА рд╕реАрдорд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдЧрдВрднреАрд░ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд░реЛрдХ рд╕рдХрддреЗред рдбреЗрдореЛрдирд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕реА рдореЗрдВ рдмрдЪреНрдЪреЗ рднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкрд╛рдпрдерди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдорд╛рди рдирд╣реАрдВ рд╣реИред рдереНрд░реЗрдб рдмрдирд╛рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд╣рд╕ рд╣реБрдЖ рдХрд░рддреА рдереА, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд▓рд╛ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рджреВрд╕рд░реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рдпрд╛ рдмрджрддрд░ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ (рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣рд╛рдВ рдЕрдЬрд╡рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ)

  • рд╕реНрд╡рддрдВрддреНрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП subprocess.Popen рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдмрдЪреНрдЪреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрддрд░-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП UNIX рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  • рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдереНрд░реЗрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдиреЗрдХреНрд╕рд╕рд░реА рд╣реИ рдФрд░ рдЖрдкрдХреА рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИ?

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

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

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

@miraculixx рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ рдХрд╣реАрдВ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ? рдореИрдВ рдПрдХ рдирдЬрд╝рд░ рд░рдЦрдирд╛ рдФрд░ / рдпрд╛ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддрд╛ / рдЪрд╛рд╣рддреА рд╣реВрдБред рдореИрдВ рдЖрдк рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВ - рд╕реНрдХреЗрд▓реЗрд░ рд╕реНрдкреЙрдирд┐рдВрдЧ рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ - рдФрд░ рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реЗрд▓реЗрд░реА рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред

@pgeez рдпрджрд┐ рдЖрдк рд╕реНрдХреЗрд▓реЗрд░ рдореЗрдВ рдЙрдкрдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ JOBLIB_MULTIPROCESSING = 0 рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Https://github.com/scikit-learn/scikit-learn/blob/0.18.X/sklearn/externals/joblib/_multiprocessing_helpers.py

@jennaliu рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди @miraculixx рдХреА рддрд░рд╣, рдореБрдЭреЗ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧреЛрдВ рдиреЗ рдЕрдЬрд╡рд╛рдЗрди рдХреА рдбреЗрдореЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреА рдпреВрдирд┐рдХреНрд╕ рдбрдмрд▓-рдлреЛрд░реНрдХ рдЪрд╛рд▓ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ?

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рд╕реВрддреНрд░ рдХрд╛ рд╢реАрд░реНрд╖рдХ рдкрдврд╝рд╛ рд╣реИ?!?

@sebastroy рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдореИрдВ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЗрд╕ рдзрд╛рдЧреЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЕрднреА рдбрдмрд▓ рдХрд╛рдВрдЯрд╛ рдЦреЛрдЬрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рднреНрд░рдо рдпрд╣ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдбреЗрдорди рдлреЛрд░реНрдХ рдЕрдЬрд╡рд╛рдЗрди рд╕реЗ рдорд╛рд░реЗ рдЬрд╛ рд░рд╣реЗ рдереЗ, рди рдХрд┐ рдпрд╣ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ рд░реЛрдХрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред

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

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

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ find рдореБрдЭреЗ рдпрд╣ рдореБрджреНрджрд╛ рддрдм рдорд┐рд▓рд╛, рдЬрдм рдореИрдВ рд╕реЗрд▓реЗрд░реА рдХреЗ рдХрд╛рд░реНрдп рдореЗрдВ рдЕрдиреНрд╕рд┐рдмрд▓ рдкреНрд▓реЗрдмреБрдХ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
@Martinth рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд┐рдзрд┐ рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ current_process()._config рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ
{'authkey': b"y&e\x8d'\xcb\xd4\r\xd2\x86\x06\xe7\x9e\x14\xaf \xbc\xc4\x95\xa5G\xec&[i\x19\xf3G-\x06\xac\x19", 'semprefix': '/mp', 'daemon': True} ред
рдлрд┐рд░ рдореИрдВ рдлрд╝реАрд▓реНрдб daemon рд╕реЗ False рдкреБрди: рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХрд╛рд░реНрдп рдореЗрдВ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рдпрд╛ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ?

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

     @app.task
    def handleBigZipfile(filename,nid):
    current_process()._config['daemon'] = False
    logger.info('{} begin handle!'.format(filename))
    handleAll(filename,nid)
     logger.info('{} is done!'.format(filename))

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

рдирдорд╕реНрддреЗ ,

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реБрдВрджрд░ рдорд╛рдирдХ рд╕реЗрдЯ-рдЕрдк рд╣реИ: Django + Rabbitmq + рдЕрдЬрд╡рд╛рдЗрди-4.0.2 + рдЕрдЬрдЧрд░-2.7 + рд╕реЗрдВрдЯреЛрд╕ -7

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

рдбреЗрдорди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
рдХрдорд╛рдВрдб рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рдерд╛: рдЕрдЬрд╡рд╛рдЗрди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ -B -A celery_task -l рдбрд┐рдмрдЧ
рдЯреНрд░реЗрд╕реЗрдмреИрдХ рд▓реЙрдЧреНрд╕:

[2017-09-26 23:27:08,838: WARNING/PoolWorker-2] ERROR
[2017-09-26 23:27:08,839: WARNING/PoolWorker-2] Traceback (most recent call last):
[2017-09-26 23:27:08,839: WARNING/PoolWorker-2] File "/home/induser/config.py", line 612, in main
[2017-09-26 23:27:08,840: WARNING/PoolWorker-2] mylog_process = mp.Process(target=test_logger_process, args=(myqueue,))
[2017-09-26 23:27:08,840: WARNING/PoolWorker-2] File "/usr/lib64/python2.7/multiprocessing/process.py", line 98, in __init__
[2017-09-26 23:27:08,841: WARNING/PoolWorker-2] self._authkey = _current_process._authkey
[2017-09-26 23:27:08,841: WARNING/PoolWorker-2] AttributeError: 'Process' object has no attribute '_authkey'

рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХрд╛ рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:

import multiprocessing as mp
from celery.schedules import crontab
from celery.decorators import periodic_task

@periodic_task(run_every=crontab(minute='*/1'), name='test_process_celery')
def main():
data = config_read()
try:
    myqueue = mp.Queue(-1)
    mylog_process = mp.Process(target=test_logger_process, args=(myqueue,))
    mylog_process.start()
    . . .
    . . .
except Exception as e:
    raise
finally:
    mylog_process.join()

рдзрдиреНрдпрд╡рд╛рджред

рдпрджрд┐ рдпрд╣ рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рд╣реИ рддреЛ рдорд╛рд╕реНрдЯрд░ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

рдЗрд╕рдореЗрдВ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:

from multiprocessing import Process, Value
import ctypes

[...]
        result = Value('i', 0)
        text = Value(ctypes.c_char_p, fail_string.encode())
        p = Process(target=reader.find_text_async, args=(result, text, ))
        p.start()
        p.join(5)

        if p.is_alive():
            logging.WARNING("Manual terminating the process 'find_text_async'")
            p.terminate()

рд▓реЗрдХрд┐рди рдЕрдЬрд╡рд╛рдЗрди рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рд╛рдИрд╕:

рдлрд╝рд╛рдЗрд▓ "/usr/lib/python3.5/multiprocessing/process.py", рд▓рд╛рдЗрди 103, рд╢реБрд░реБрдЖрдд рдореЗрдВ
'рдбреЗрдореЛрдирд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрдЪреНрдЪреЗ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ'
рдЕрднрд┐рдХрдерди: рдбреЗрдореЛрдирд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрдЪреНрдЪреЗ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

рдореИрдВрдиреЗ рдмрд┐рд▓рд┐рдпрд░реНрдб рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

from billiard import Process, Value

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

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

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

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

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

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

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