рдЬрдм рдореИрдВ рд╕рдореВрд╣ рд╕реЗ рдЖрдП рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдХрд╛рд░реНрдпрдирд╛рдо рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХреЛрдИ рдирд╣реАрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдкрд╛рдпрдерди (рдУрдВ): 3.3.6, 3.4.2
рдЕрдЬрд╡рд╛рдЗрди: 3.1.17
рдкрд░рд┐рдпреЛрдЬрдирд╛/рдЕрдЬрд╡рд╛рдЗрди.py
from celery import Celery
app = Celery('proj',
broker='amqp://',
backend='amqp://',
include=['proj.tasks'])
# Optional configuration, see the application user guide.
app.conf.update(
CELERY_TASK_RESULT_EXPIRES=3600,
)
if __name__ == '__main__':
app.start()
рдкрд░рд┐рдпреЛрдЬрдирд╛/рдХрд╛рд░реНрдп.py
from proj.celery import app
@app.task
def add(x, y):
return x + y
@app.task
def mul(x, y):
return x * y
run_add.py
from celery import group
from proj import tasks
import logging
log = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
results = group([
tasks.mul.s(4,4),
tasks.add.s(3,3)
]).delay()
while results.waiting():
pass
if results.successful():
for result in results:
log.info('ID: {}, name: {}'.format(result.task_id, result.task_name))
рдирддреАрдЬрд╛:
INFO:__main__:ID: c2fa4f30-0691-41ee-8f7b-e7dcbf32d09a, name: None
INFO:__main__:ID: f545bfa0-2ad7-40b3-9d05-561d4c1eba7e, name: None
рдРрд╕рд╛ рд╣реА рдХреБрдЫ рдЬрдВрдЬреАрд░реЛрдВ рдХреЗ рд╕рд╛рде рднреА рд╣реЛрддрд╛ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкреЛрд╕реНрдЯ рднреА рд╣реИ:
рдЯрд╛рд╕реНрдХ_рдирд╛рдо рдПрдХ рд╕реНрдерд╛рдиреАрдп рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдм рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рднреЗрдЬреЗ рдЧрдП рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдирд╛рдо рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЕрдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдмреИрдХрдПрдВрдб рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
@ask рдХреНрдпрд╛ рдЕрдм task_name рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реЗрдм рдкрд░ рдХрд╛рд░реНрдп рдбреЗрдЯрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╣реИ, рдФрд░ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдПрдХ AsyncResult рджрд┐рдП рдЬрд╛рдиреЗ рдкрд░, рдХрд╛рд░реНрдп рдХрд╛ рдирд╛рдо рд▓реЙрдЧ рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@ask рдХреНрдпрд╛ рдЕрдм task_name рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реЗрдм рдкрд░ рдХрд╛рд░реНрдп рдбреЗрдЯрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╣реИ, рдФрд░ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдПрдХ AsyncResult рджрд┐рдП рдЬрд╛рдиреЗ рдкрд░, рдХрд╛рд░реНрдп рдХрд╛ рдирд╛рдо рд▓реЙрдЧ рдХрд░реЗрдВред