MJay

Celery 본문

Cloud Computing

Celery

MJSon 2017. 4. 1. 18:26
Celery가 무엇인지 알아보자


정의

Asynchronous task queue/job based on distributed message passing

일단 message passing이라는게 뭔지 알아야한다.

메세지를 process에 보내서 code를 run 시켜주는 것이다



특징은 concurrency 와 oop를 서포트해준다

이건 예전 conventional programming이랑 다르다

옜날에는 process, function이 name으로 invoke됬기 때문이다.

message processing은 object model을 써서 general function이랑 구별된다고 한다.

쨋든 이런게 message processing이다



Celery의 특징은 이와같다.

일단 1. Asychronous -> object들이 busy 하거나 not running 할수 있다.
        2. real-time operation 실시간으로 하는 것
        3. 실행 유닛은 tasks라고 한다. Eventlet , gevent로 불리는 worker servers가 있다.
        4. message 를 전달해주는게 있는데 그걸 broker라고 한다
        
broker란



send 하고 receive messages해주는 역할을 해준다고 해서 broker라고 한다.






broker는 url로 정의된다. pyamqp는 RabbitMQ이다.

이렇게 하면 Result을 받아야한다. 왜냐면 background로 돌아가기 때문이다.






asynchronous만큼 result.ready는 잘 쓰지 않고

result.get 를 통해 result을 알수있어서 좋다

result.get(propagate=False)를 통해 traceback을 할수있다.



이렇게 configure을 해서 다른 분산 처리할 machine에 쉽게 설정을 변경해줄수있다.



이렇게  celeryconfig를 해서도 해줄수있다.

Celery 는 message transport가 필요하다 

그걸 해주는게 RabbitMQ and Redis broker이다.

broker는 single machine , multiple machines, or even acroos data centers.이다.



CoRoutine 이 나온다



서브루틴은 또 뭐냐






 Coroutines are a general control structure whereby flow control is cooperatively passed between two different routines without returning.

The 'yield' statement in Python is a good example. It creates a coroutine. When the 'yield ' is encountered the current state of the function is saved and control is returned to the calling function. The calling function can then transfer execution back to the yielding function and its state will be restored to the point where the 'yield' was encountered and execution will continue.



CoRoutine만 생각하자





Blocking" means that the caller waits until the callee finishes its processing. For instance, a "blocking read" from a socket waits until there is data to return; a "non-blocking" read does not, it just returns an indication (usually a count) of whether there was something read.

You hear the term mostly around APIs that access resources that don't necessarily require CPU attention -- I/O, for instance. You also hear it in multi-threading: A call from Thread A to Thread B might be designed to "block" (hold up Thread A) until Thread B achieves the relevant state to process or at least accept the request. (The most obvious example there being "join", which usually means "I, Thread A, want to wait until Thread B has terminated" -- you use that when exiting a multi-threaded program.)







'Cloud Computing' 카테고리의 다른 글

Celery 간단 요약 정리 1  (0) 2017.04.09
Condor-annes vs Celery  (0) 2017.04.02
TR-Spark  (0) 2017.03.29
서버 var/www/html  (0) 2017.03.18
Cloud Computing 이란 ( Coursera)  (0) 2017.02.18