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
(AJAJ?)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 inspectPython API: eventy, snapshots
/
#