summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Traut <manut@mecka.net>2014-02-19 09:36:54 +0100
committerManuel Traut <manut@mecka.net>2014-02-19 09:36:54 +0100
commit5ec6915a8f955c8ef72165e7392718a0b1f75bfa (patch)
tree26b05253d8be25cf17ab5224aff70b3b63480fab
parent276f95e75e21e16fb132ea682e6dbf8dec520738 (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/README3
-rw-r--r--frameworks/middleware/examples/celery/exec_task.py15
-rwxr-xr-xframeworks/middleware/examples/celery/test.py36
-rwxr-xr-xframeworks/middleware/examples/celery/worker.sh2
-rw-r--r--frameworks/middleware/pres_middleware.tex77
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}