diff options
| author | Manuel Traut <manut@mecka.net> | 2014-02-19 09:36:54 +0100 |
|---|---|---|
| committer | Manuel Traut <manut@mecka.net> | 2014-02-19 09:36:54 +0100 |
| commit | 5ec6915a8f955c8ef72165e7392718a0b1f75bfa (patch) | |
| tree | 26b05253d8be25cf17ab5224aff70b3b63480fab | |
| parent | 276f95e75e21e16fb132ea682e6dbf8dec520738 (diff) | |
middleware: add celery section and example
celery is a python framework for job execution
Signed-off-by: Manuel Traut <manut@mecka.net>
| -rw-r--r-- | frameworks/middleware/examples/celery/README | 3 | ||||
| -rw-r--r-- | frameworks/middleware/examples/celery/exec_task.py | 15 | ||||
| -rwxr-xr-x | frameworks/middleware/examples/celery/test.py | 36 | ||||
| -rwxr-xr-x | frameworks/middleware/examples/celery/worker.sh | 2 | ||||
| -rw-r--r-- | frameworks/middleware/pres_middleware.tex | 77 |
5 files changed, 133 insertions, 0 deletions
diff --git a/frameworks/middleware/examples/celery/README b/frameworks/middleware/examples/celery/README new file mode 100644 index 0000000..9045901 --- /dev/null +++ b/frameworks/middleware/examples/celery/README @@ -0,0 +1,3 @@ +apt-get install python-celery +./worker.sh +./test.py diff --git a/frameworks/middleware/examples/celery/exec_task.py b/frameworks/middleware/examples/celery/exec_task.py new file mode 100644 index 0000000..9169250 --- /dev/null +++ b/frameworks/middleware/examples/celery/exec_task.py @@ -0,0 +1,15 @@ +import os + +from celery import Celery + +app = Celery ('tasks', broker='sqla+sqlite:///celerydb.sqlite', + backend='db+sqlite:///results.sqlite') + +@app.task +def execute (command): + return os.system (command) + +@app.task +def execute2 (command): + if os.system (command): + raise Exception ("command not found") diff --git a/frameworks/middleware/examples/celery/test.py b/frameworks/middleware/examples/celery/test.py new file mode 100755 index 0000000..7d79c8e --- /dev/null +++ b/frameworks/middleware/examples/celery/test.py @@ -0,0 +1,36 @@ +#!/usr/bin/python + +import sys +import traceback + +from exec_task import execute, execute2 + +execute.delay ("echo hello world") + +print "\n\n" + +result = execute.delay ("sleep 2") +print "result ready?", result.ready () +print "wait for result..." +ret = result.get (timeout=10) +print "task done", ret + +print "\n\n" + +result = execute.delay ("/bin/false") +print "/bin/false:", result.get (timeout=10) + +print "\n\n" + +result = execute2.delay ("/bin/treu") +try: + print "/bin/treu:", result.get (timeout=10) +except: + print "exception occured; backtrace:" + print result.traceback + +print "\n\n" + +result = execute2.delay ("/bin/true") +print "/bin/true:", result.get (timeout=10) + diff --git a/frameworks/middleware/examples/celery/worker.sh b/frameworks/middleware/examples/celery/worker.sh new file mode 100755 index 0000000..1705198 --- /dev/null +++ b/frameworks/middleware/examples/celery/worker.sh @@ -0,0 +1,2 @@ +#!/bin/sh +celery -A exec_task worker --loglevel=info diff --git a/frameworks/middleware/pres_middleware.tex b/frameworks/middleware/pres_middleware.tex index c2933ba..c2eacc7 100644 --- a/frameworks/middleware/pres_middleware.tex +++ b/frameworks/middleware/pres_middleware.tex @@ -445,6 +445,83 @@ MyClient::message_rx(const QXmppMessage& msg) \subsection{Celery} +\begin{frame} +\frametitle{Overview} +\begin{itemize} +\item Distributed Task Queue +\item based on message passing +\item real-time operation and scheduling +\item Tasks can be hosted on a single or on mulitple workers +\item synchronous and asynchronous execution +\item rate limit support +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{implementations} +\begin{itemize} +\item celery-project: Python +\item celery-php: PHP +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{celeryproject} +\begin{block}{supports multiple message broker} +\begin{itemize} +\item database: Django, or any supported by SQLAlchemy +\item RabbitMQ +\item Redis +\item Amazon SQS (experimental) +\end{itemize} +\end{block} +\end{frame} + +\begin{frame} +\frametitle{celeryproject} +\begin{block}{supports multiple result storage} +\begin{itemize} +\item database: any supported by SQLAlchemy +\item memcached +\item Redis +\item AMQP +\item Cassandra +\item IronCache +\end{itemize} +\end{block} +\end{frame} + +\begin{frame}[fragile] +\frametitle{celeryproject, example} +exec\_task.py +\begin{lstlisting}{language=python} +import os +from celery import Celery + +app = Celery ('tasks', broker='sqla+sqlite:///celerydb.sqlite) + +@app.task +def execute (command): + os.system (command) +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{celeryproject, example} +test.py +\begin{lstlisting}{language=python} +from exec_task import execute + +execute.delay ("echo hello world") +\end{lstlisting} + +start the example: +\begin{lstlisting}{language=bash} +term1% celery -A exec_task worker +term2% ./test.py +\end{lstlisting} +\dots an example using return values and exceptions is in the example dir +\end{frame} \subsection{DDS} |
