Herramientas de usuario

Herramientas del sitio


fw:celery

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
fw:celery [2014/08/17 16:16]
alfred [Tasks]
fw:celery [2020/05/09 09:25] (actual)
Línea 540: Línea 540:
 ==== Testing ==== ==== Testing ====
 With the configuration ''​CELERY_ALWAYS_EAGER''​ assigned as True, all the workers are called without any asynchronous behavior. With the configuration ''​CELERY_ALWAYS_EAGER''​ assigned as True, all the workers are called without any asynchronous behavior.
 +==== Periodic tasks ====
 +You can call Celery tasks in concrete moments: [[http://​docs.celeryproject.org/​en/​latest/​userguide/​periodic-tasks.html| periodic tasks guide]]. To do so you need a beat process (only one) to call the workers when it's needed. Next example are two files:
 +  * **beat.py**,​ which is executed as: ''​celery -A beat beat''​
 +<code python>
 +from datetime import timedelta
 +from celery import Celery
 +from tasks import app
 +
 +app.conf.update(
 + CELERYBEAT_SCHEDULE = {
 +     '​add-every-30-seconds':​ {
 +         '​task':​ '​tasks.add',​
 +         '​schedule':​ timedelta(seconds=10)
 +     },
 + },
 + CELERY_TIMEZONE = '​UTC'​
 + )
 +</​code>​
 +  * **tasks.py**,​ which is executed as: ''​celery -A tasks worker''​
 +<code python>
 +from celery import Celery
 +import datetime
 +
 +app = Celery('​tasks',​ broker='​amqp://​guest@192.168.0.100//'​)
 +
 +@app.task
 +def add():
 +    f = open('/​home/​alfred/​a.txt',​ '​a'​)
 +    f.write(str(datetime.datetime.now()))
 +    f.close()
 +</​code>​
 +
 ==== Little tools ==== ==== Little tools ====
  
-=== Periodic tasks === +
-You can call Celery tasks in concrete moments: [[http://​docs.celeryproject.org/​en/​latest/​userguide/​periodic-tasks.html| periodic tasks guide]].+
  
 === HTTP Callbacks === === HTTP Callbacks ===
Línea 648: Línea 679:
 ==== Notes ==== ==== Notes ====
   * If you want to use print you must set ''​CELERY_REDIRECT_STDOUTS''​ to ''​False''​.   * If you want to use print you must set ''​CELERY_REDIRECT_STDOUTS''​ to ''​False''​.
 +
 +=== Execute celery task from c# ===
 +<code csharp>
 +using (var channel = connection.CreateModel())
 +{
 +    var guid = Guid.NewGuid().ToString();​
 +    string message = String.Format("​{{\"​id\":​ \"​{0}\",​ \"​task\":​ \"​my.task\",​ \"​args\":​ [1, 2]}}", ​ guid);
 +    var body = Encoding.UTF8.GetBytes(message);​
 +
 +    IBasicProperties props = channel.CreateBasicProperties();​
 +    props.ContentType = "​application/​json";​
 +    props.ContentEncoding = "​UTF-8";​
 +    //​channel.QueueDeclare("​celery",​ true, true, false, null);
 +    channel.BasicPublish("​celery",​ "​celery",​ props, body);
 +
 +    Console.WriteLine("​ [x] Sent {0}", message);
 +}
 +</​code>​
 +When task is:
 +<code python>
 +app = Celery('​tasks',​ broker='​amqp://​guest@192.168.0.100//'​)
 +@app.task(name='​my.task',​ ignore_result=True)
 +def add(a, b):
 +    logger = get_task_logger(__name__)
 +    logger.critical('​tralara lalala ' + str(a+b))
 +</​code>​
 +
fw/celery.1408292176.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)