Difference between revisions of "Celery"

From RHS Wiki
Jump to navigation Jump to search
Line 26: Line 26:
 
== Launch ==
 
== Launch ==
 
  celery -A {ProjectName} worker -l info --queues=queuename1,queuename2
 
  celery -A {ProjectName} worker -l info --queues=queuename1,queuename2
 +
 +
== Run task at specific time ==
 +
<source lang="Python">import datetime
 +
 +
import celery
 +
 +
@celery.shared_task(bind=True)
 +
def add_tag(task, user_id, tag):
 +
    User.objects.filter(id=user_id, tags__ne=tag).update(push__tags=tag)
 +
    return True
 +
 +
user_id = '582ee32a5b9c861c87dc297e'
 +
tag = 'new_tag'
 +
started_at = datetime.datetime(2018, 3, 12, tzinfo=datetime.timezone.utc)
 +
add_tag.apply_async((user_id, tag), eta=started_at)</source>

Revision as of 13:59, 3 September 2018

Install

pip install Celery

Create Virtual Host and User

sudo rabbitmqctl add_user <username> <password>
sudo rabbitmqctl add_vhost <vhostname>
sudo rabbitmqctl set_permissions -p <vhostname> <username> ".*" ".*" ".*"

With RabbitMQ

sudo apt-get install rabbitmq-server
# Create rabbitmq user
sudo rabbitmqctl add_user myuser mypassword
# Create rabbitmq vhost
sudo rabbitmqctl add_vhost myvhost
sudo rabbitmqctl set_user_tags myuser mytag
sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"
Starting/Stopping the RabbitMQ server
To start the server:
$ sudo rabbitmq-server
you can also run it in the background by adding the -detached option (note: only one dash):
$ sudo rabbitmq-server -detached
Never use kill to stop the RabbitMQ server, but rather use the rabbitmqctl command:
$ sudo rabbitmqctl stop

Workers

Launch

celery -A {ProjectName} worker -l info --queues=queuename1,queuename2

Run task at specific time

import datetime

import celery

@celery.shared_task(bind=True)
def add_tag(task, user_id, tag):
    User.objects.filter(id=user_id, tags__ne=tag).update(push__tags=tag)
    return True

user_id = '582ee32a5b9c861c87dc297e'
tag = 'new_tag'
started_at = datetime.datetime(2018, 3, 12, tzinfo=datetime.timezone.utc)
add_tag.apply_async((user_id, tag), eta=started_at)