рдЕрдЬрд╡рд╛рдЗрди - рд╡рд┐рддрд░рд┐рдд рдиреМрдХрд░реА рдХрддрд╛рд░

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

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


рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ? рд╣рдо рдмрд┐рд▓реНрд▓реА рдорд╛рдВрдЧрддреЗ рд╣реИрдВред

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

celeryconfig.py:

CARROT_BACKEND = "ghettoq.taproot.MongoDB" BROKER_HOST = "xxx" BROKER_PORT = 27017 BROKER_VHOST = "celery" CELERY_SEND_TASK_ERROR_EMAILS = True ADMINS = ( ('Admin', 'admin@localhost'), ) CELERYD_MAX_TASKS_PER_CHILD = 5 CELERY_IMPORTS = ("tasks", ) CELERY_DISABLE_RATE_LIMITS = True CELERY_RESULT_BACKEND = "mongodb" CELERY_MONGODB_BACKEND_SETTINGS = { "host": "xxx", "port": 27017, "database": "celery", "taskmeta_collection": "my_taskmeta_collection", } 


рд░рди рдбреЗрдореЙрди: celeryd -l INFO -B
рд╣рдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдХрд▓реНрдк-рдмреА рдЖрд╡рдзрд┐рдХ рдХрд╛рд░реНрдп рдбреЗрдореЙрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ рд╕реЗрд▓рд░реАрдмреАрдЯ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдЕрдм рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рдмрдирд╛рдПрдБред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛рд░реНрдп-рд╕реВрдЪреА рд╣реИ:

 from celery.decorators import task from celery.decorators import periodic_task from celery.task.schedules import crontab @periodic_task(run_every=timedelta(seconds=60)) def mail_queue(): print "Task is executed every minute" @periodic_task(run_every=crontab(hour=0, minute=10)) def transactions(): print "Task is executed every day on 0:10" @task def delayed_function(id): some_function() @task def delayed_heavy_function(id): some_heavy_function() 


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

 from tasks import delayed_function, delayed_heavy_function delayed_function.apply_async(args=[id], countdown=300) #    300  r = delayed_heavy_function.delay(id) #  (   ),    


рдЕрдм, рдкрд░рд┐рдгрд╛рдо рдФрд░ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рддрдереНрдп рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд░реЗрдВрдЧреЗ:

rред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА () # рд░рд┐рдЯрд░реНрди рд╕рд╣реА рд╣реИ рдЕрдЧрд░ рдХрд╛рдо рдХрд┐рдпрд╛
r.result # рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрд╛ рдХреЛрдИ рднреА рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ)
r.get () # рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдФрд░ рдЙрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо (рд╕рдордХрд╛рд▓рд┐рдХ) рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛

рдЪрд░ r рдХреЛ cPickle рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреИрд╢ рдореЗрдВ рдорд╛рди рдбрд╛рд▓реЗрдВ рдФрд░ рдХрд╛рд░реНрдп рд╕реНрдерд┐рддрд┐ рдХреЛ ajax рдХреЗ рд╕рд╛рде рдкреВрдЫрддрд╛рдЫ рдХрд░реЗрдВред рдпрд╛ рдЖрдк рдХрд╛рд░реНрдп рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдХрд╛рд░реНрдп рдЖрдИрдбреА рдХреЛ рд╕реНрд╡рдпрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред

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

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

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

Source: https://habr.com/ru/post/In102742/


All Articles