[Pythhon] 비동기 작업의 실행 환경 만들기 + 모니터링 환경
이것은 무엇이냐
때로는 임무를 대열에 잘 저장하고 스태프로 가볍게 처리하고 싶을 때가 있다.
계산 임무라든지 대량의 디버깅 작업이라든지.
그런 팀을 만들 때 파이톤celery이면 편해요.
골대
이걸 읽은 사람은 파이톤으로 간단하게 비동기 처리의 구조를 실현하고 상황을 감시할 때까지
할 수 있는 일.
준비물
이걸 읽은 사람은 파이톤으로 간단하게 비동기 처리의 구조를 실현하고 상황을 감시할 때까지
할 수 있는 일.
준비물
apt-get install redis-server
pip install celery
pip install flower
최소한의 구성 요소
main.py
import tasks
print('<first task>')
# ここでタスク起動 (runタスク)
worker = tasks.run.delay()
# 終わらぬなら終わるまで待とうホトトギス
while not worker.ready():
pass
# 返り値をだす
print worker.result
print('<second task>')
# ここでタスク起動 (calcタスク)
worker = tasks.calc.delay(100, 200)
# 終わらぬなら終わるまで待とうホトトギス
while not worker.ready():
pass
# 返り値をだす
print worker.result
tasks.py
비동기 처리를 할 임무를 함수에 모아 @task에 시뮬레이터를 추가한 후
셀리부터 칠 수 있어요.
매개 변수·환산 값의 교차,celery의 시리아 레사는 잘 한다.
자제류의 실례 등은 엄숙할 수 없으니 주의하세요.import time
from celery.decorators import task
@task
def run():
time.sleep(10)
print('処理 おわた')
return 'おわったよ'
@task
def calc(a, b):
return a+b
celeryconfig.py
celery 이동에 사용되는 설정 파일입니다.기본적으로 스태프 주변의 데이터 교환은
json으로 하고 싶어서 임무·결과가 교차하는 시리아 레이저관'json'을 지정했습니다.
백엔드(BROKER)는 Redis로 이동하지만 RabbitMQ를 사용할 수도 있습니다.
스케줄러:그건자네에게맡길게.
다음 예에서 스태프는tasks입니다.py를 읽습니다.비동기적으로 처리할 함수
포함된 모든 스크립트를 지정합니다.
CELERYD_LOG_LEVEL을 INFO로 설정하면 작업의 표준 출력도 기록됩니다(celeryd.log).
쓰여 있다.프로덕션에서 ERROR 같은 것을 미리 설정하는 것이 좋습니다.
※ 그나저나 셀레리드는LOG_전설에 의하면 LEVEL이 Duplicate가 되었다고 한다.
CELERYD_콘서트 런시=1 때문에 대열을 하나씩 팔았다.
여기 CPU 개수에 맞는 게 좋겠죠?BROKER_URL = 'redis://localhost/0'
CELERYD_CONCURRENCY = 1
CELERY_RESULT_BACKEND = 'redis'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = "redis"
CELERYD_LOG_FILE = "./celeryd.log"
CELERYD_LOG_LEVEL = "INFO"
CELERY_IMPORTS = ("tasks", )
가동 방법
redis-server 시작
우선 Redis-server를 시작합시다.(필수)
서비스 시작한 사람 건너뛰기.$ redis-server
celeryworker 시작
이렇게 되면 스태프들이 대열을 처리할 준비를 할 수 있을 거예요.(env) docker@1824542bb286:~/workspace$ celery worker
/home/docker/.virtualenvs/env2/local/lib/python2.7/site-packages/celery/app/defaults.py:251: CPendingDeprecationWarning:
The 'CELERYD_LOG_LEVEL' setting is scheduled for deprecation in version 2.4 and removal in version v4.0. Use the --loglevel argument instead
alternative='Use the {0.alt} instead'.format(opt))
/home/docker/.virtualenvs/env2/local/lib/python2.7/site-packages/celery/app/defaults.py:251: CPendingDeprecationWarning:
The 'CELERYD_LOG_FILE' setting is scheduled for deprecation in version 2.4 and removal in version v4.0. Use the --logfile argument instead
alternative='Use the {0.alt} instead'.format(opt))
-------------- celery@1824542bb286 v3.1.23 (Cipater)
---- **** -----
--- * *** * -- Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trusty
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: default:0x7f068383f610 (.default.Loader)
- ** ---------- .> transport: redis://localhost:6379/0
- ** ---------- .> results:
- *** --- * --- .> concurrency: 1 (prefork)
-- ******* ----
--- ***** ----- [queues]
-------------- .> celery exchange=celery(direct) key=celery
[tasks]
. tasks.run
실제로 대열에 넣어볼게요.
비동기 처리docker@1824542bb286:~/workspace$ python main.py
<first task>
おわったよ
<second task>
300
flower를 통한 작업 모니터링
flower 시작
(env2) docker@1824542bb286:~/workspace$ celery flower
/home/docker/.virtualenvs/env2/local/lib/python2.7/site-packages/celery/app/defaults.py:251: CPendingDeprecationWarning:
The 'CELERYD_LOG_LEVEL' setting is scheduled for deprecation in version 2.4 and removal in version v4.0. Use the --loglevel argument instead
alternative='Use the {0.alt} instead'.format(opt))
/home/docker/.virtualenvs/env2/local/lib/python2.7/site-packages/celery/app/defaults.py:251: CPendingDeprecationWarning:
The 'CELERYD_LOG_FILE' setting is scheduled for deprecation in version 2.4 and removal in version v4.0. Use the --logfile argument instead
alternative='Use the {0.alt} instead'.format(opt))
[I 160617 13:02:20 command:136] Visit me at http://localhost:5555
[I 160617 13:02:20 command:141] Broker: redis://localhost:6379/0
[I 160617 13:02:20 command:144] Registered tasks:
['celery.backend_cleanup',
'celery.chain',
'celery.chord',
'celery.chord_unlock',
'celery.chunks',
'celery.group',
'celery.map',
'celery.starmap',
'tasks.run']
[I 160617 13:02:20 mixins:231] Connected to redis://localhost:6379/0
액세스 인터페이스
기본적으로 localhost:55555는 flower(감시 인터페이스)의 URL입니다.
감시는 물론 직원 수도 조절할 수 있어 편리하다.
Reference
이 문제에 관하여([Pythhon] 비동기 작업의 실행 환경 만들기 + 모니터링 환경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/xecus/items/9722b287cc6aee4083ae
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import tasks
print('<first task>')
# ここでタスク起動 (runタスク)
worker = tasks.run.delay()
# 終わらぬなら終わるまで待とうホトトギス
while not worker.ready():
pass
# 返り値をだす
print worker.result
print('<second task>')
# ここでタスク起動 (calcタスク)
worker = tasks.calc.delay(100, 200)
# 終わらぬなら終わるまで待とうホトトギス
while not worker.ready():
pass
# 返り値をだす
print worker.result
import time
from celery.decorators import task
@task
def run():
time.sleep(10)
print('処理 おわた')
return 'おわったよ'
@task
def calc(a, b):
return a+b
BROKER_URL = 'redis://localhost/0'
CELERYD_CONCURRENCY = 1
CELERY_RESULT_BACKEND = 'redis'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = "redis"
CELERYD_LOG_FILE = "./celeryd.log"
CELERYD_LOG_LEVEL = "INFO"
CELERY_IMPORTS = ("tasks", )
redis-server 시작
우선 Redis-server를 시작합시다.(필수)
서비스 시작한 사람 건너뛰기.
$ redis-server
celeryworker 시작
이렇게 되면 스태프들이 대열을 처리할 준비를 할 수 있을 거예요.
(env) docker@1824542bb286:~/workspace$ celery worker
/home/docker/.virtualenvs/env2/local/lib/python2.7/site-packages/celery/app/defaults.py:251: CPendingDeprecationWarning:
The 'CELERYD_LOG_LEVEL' setting is scheduled for deprecation in version 2.4 and removal in version v4.0. Use the --loglevel argument instead
alternative='Use the {0.alt} instead'.format(opt))
/home/docker/.virtualenvs/env2/local/lib/python2.7/site-packages/celery/app/defaults.py:251: CPendingDeprecationWarning:
The 'CELERYD_LOG_FILE' setting is scheduled for deprecation in version 2.4 and removal in version v4.0. Use the --logfile argument instead
alternative='Use the {0.alt} instead'.format(opt))
-------------- celery@1824542bb286 v3.1.23 (Cipater)
---- **** -----
--- * *** * -- Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trusty
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: default:0x7f068383f610 (.default.Loader)
- ** ---------- .> transport: redis://localhost:6379/0
- ** ---------- .> results:
- *** --- * --- .> concurrency: 1 (prefork)
-- ******* ----
--- ***** ----- [queues]
-------------- .> celery exchange=celery(direct) key=celery
[tasks]
. tasks.run
실제로 대열에 넣어볼게요.
비동기 처리
docker@1824542bb286:~/workspace$ python main.py
<first task>
おわったよ
<second task>
300
flower를 통한 작업 모니터링
flower 시작
(env2) docker@1824542bb286:~/workspace$ celery flower
/home/docker/.virtualenvs/env2/local/lib/python2.7/site-packages/celery/app/defaults.py:251: CPendingDeprecationWarning:
The 'CELERYD_LOG_LEVEL' setting is scheduled for deprecation in version 2.4 and removal in version v4.0. Use the --loglevel argument instead
alternative='Use the {0.alt} instead'.format(opt))
/home/docker/.virtualenvs/env2/local/lib/python2.7/site-packages/celery/app/defaults.py:251: CPendingDeprecationWarning:
The 'CELERYD_LOG_FILE' setting is scheduled for deprecation in version 2.4 and removal in version v4.0. Use the --logfile argument instead
alternative='Use the {0.alt} instead'.format(opt))
[I 160617 13:02:20 command:136] Visit me at http://localhost:5555
[I 160617 13:02:20 command:141] Broker: redis://localhost:6379/0
[I 160617 13:02:20 command:144] Registered tasks:
['celery.backend_cleanup',
'celery.chain',
'celery.chord',
'celery.chord_unlock',
'celery.chunks',
'celery.group',
'celery.map',
'celery.starmap',
'tasks.run']
[I 160617 13:02:20 mixins:231] Connected to redis://localhost:6379/0
액세스 인터페이스
기본적으로 localhost:55555는 flower(감시 인터페이스)의 URL입니다.
감시는 물론 직원 수도 조절할 수 있어 편리하다.
Reference
이 문제에 관하여([Pythhon] 비동기 작업의 실행 환경 만들기 + 모니터링 환경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/xecus/items/9722b287cc6aee4083ae
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(env2) docker@1824542bb286:~/workspace$ celery flower
/home/docker/.virtualenvs/env2/local/lib/python2.7/site-packages/celery/app/defaults.py:251: CPendingDeprecationWarning:
The 'CELERYD_LOG_LEVEL' setting is scheduled for deprecation in version 2.4 and removal in version v4.0. Use the --loglevel argument instead
alternative='Use the {0.alt} instead'.format(opt))
/home/docker/.virtualenvs/env2/local/lib/python2.7/site-packages/celery/app/defaults.py:251: CPendingDeprecationWarning:
The 'CELERYD_LOG_FILE' setting is scheduled for deprecation in version 2.4 and removal in version v4.0. Use the --logfile argument instead
alternative='Use the {0.alt} instead'.format(opt))
[I 160617 13:02:20 command:136] Visit me at http://localhost:5555
[I 160617 13:02:20 command:141] Broker: redis://localhost:6379/0
[I 160617 13:02:20 command:144] Registered tasks:
['celery.backend_cleanup',
'celery.chain',
'celery.chord',
'celery.chord_unlock',
'celery.chunks',
'celery.group',
'celery.map',
'celery.starmap',
'tasks.run']
[I 160617 13:02:20 mixins:231] Connected to redis://localhost:6379/0
Reference
이 문제에 관하여([Pythhon] 비동기 작업의 실행 환경 만들기 + 모니터링 환경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/xecus/items/9722b287cc6aee4083ae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)