powolne i słabo napisane w szybkie i dobrze napisane. Albo przynajmniej troche szybsze i troche lepiej.
Celery jest asynchroniczną kolejką zadań opierającą się o rozproszone przesyłanie wiadomości. Skupia się na działaniu w czasie rzeczywistym, ale wspiera również planowanie operacji.
Jednostki wykonawcze, nazywane zadaniami, są równolegle wykonywane na jednym lub więcej serwerze roboczym z użyciem pakietów multiprocessing, Eventlet bądź gevent. Zadania mogą być wykonywane asynchronicznie bądź synchronicznie.
http://celeryproject.org/
E&Y, budynek w Warszawie
Ernst & Young to światowy lider w zakresie audytu, doradztwa podatkowego, doradztwa biznesowego oraz doradztwa transakcyjnego. Chcemy wywierać pozytywny wpływ na funkcjonowanie przedsiębiorstw i rynków, a także całego społeczeństwa.
Ernst & Young, "O nas"
Nastepny slajd!
Celery jest asynchroniczną kolejką zadań opierającą się o rozproszone przesyłanie wiadomości. Skupia się na działaniu w czasie rzeczywistym, ale wspiera również planowanie operacji.
Jednostki wykonawcze, nazywane zadaniami, są równolegle wykonywane na jednym lub więcej serwerze roboczym z użyciem pakietów multiprocessing, Eventlet bądź gevent. Zadania mogą być wykonywane asynchronicznie bądź synchronicznie.
http://celeryproject.org/
Na sali na pewno ktos wie
mysql> select count(pad) from large; +------------+ | count(pad) | +------------+ | 31457280 | +------------+ 1 row in set (4 min 58.63 sec)
<?php // "/tmp/sbr334rf" $video = $_FILES['vid']['tmp_name']; // "pr0n.avi.flv" $new_name = 'videos/' . $_FILES['vid']['name'] . '.flv'; system("ffmpeg -i $video -f flv -b 200000 $new_name"); echo '<a href="player.php?video='; echo urlescape($new_name)); echo '">Twoj film</a>';
Sposoby rozwiazania kazdego z problemow; czas wykonania moze byc zmienny
echo '.'; flush();
exec("php script.php $arg1 $arg2");
ignore_user_abort(true); set_time_limit(0);
exec("php script.php $arg1 $arg2");
ignore_user_abort(true); set_time_limit(0);
http://jemblankz-monstervikings.blogspot.com/
Połączymy slangi: amerykański (ghetto) i niektórych użytkowników Mac OS (bieda-*)
Advanced
Message
Queuing
Protocol
{ 'task': 'encode', 'infile': '1.avi', 'outfile': '1.flv' }
<?xml version="1.0" encoding="UTF-8" ?> <task name="encode"> <infile>1.avi</infile> <outfile>1.flv</outfile> </task>
{ 'task': 'encode', 'infile': '1.avi', 'outfile': '1.flv' }
{ 'task': 'encode', 'infile': '2.avi', 'outfile': '2.flv' }
{ 'task': 'encode', 'infile': '3.avi', 'outfile': '3.flv' }
{ 'task': 'encode', 'infile': '4.avi', 'outfile': '4.flv' }
...
http://www.h-online.com/
JMS - Java Messaging Service
{ 'task': 'encode', 'infile': '1.avi', 'outfile': '1.flv' }
{ 'task': 'encode', 'infile': '2.avi', 'outfile': '2.flv' }
{ 'task': 'encode', 'infile': '3.avi', 'outfile': '3.flv' }
{ 'task': 'encode', 'infile': '4.avi', 'outfile': '4.flv' }
...
{ status: 'OK', file: '1.flv', id: 12345 }
{ status: 'Error', id: 12346, Error: { ExcType: ... } }
AMQP jest bardzo ogólne, jak baza
@task def convert_video(infile, outfile): return os.system("ffmpeg -i %s -f flv -b 200000 %s", infile, outfile)
Shell escaping, subprocess
from subprocess import Popen, PIPE, STDOUT @task def convert_video(infile, outfile): ffmpeg = Popen(("ffmpeg", "-i", infile, "-f", "flv", "-b", "200000", outfile), stdout=PIPE, stderr=STDOUT) ffmpeg.communicate() if ffmpeg.returncode == 0: return outfile else: raise StandardError(ffmpeg.stdout)
pyffmpeg?
>>> import tasks >>> task = tasks.convert_video.delay("1.avi", "1.flv") >>> task.ready() False >>> # minutę później >>> task.ready() True >>> task.successful() True >>> task.result '1.flv'
$c = new Celery('localhost', 'myuser', 'mypass', 'myvhost'); $result = $c->PostTask('tasks.convert_video', array("1.avi", "1.flv")); $result->ready(); // FALSE sleep(60); $result->ready(); // TRUE $result->successful();
opowiedziec o: rozproszonym (laptop babci), integracji - nie ma slajdu
taskset: pasek postępu
celeryctl inspect
Python API: eventy, snapshots
/
#