Skip to content

Instantly share code, notes, and snippets.

@faraocious
Last active August 29, 2015 13:58
Show Gist options
  • Save faraocious/10024576 to your computer and use it in GitHub Desktop.
Save faraocious/10024576 to your computer and use it in GitHub Desktop.
Exploration of Celery Issue #1671
from celerydemo.chain_tasks import a, b, c
from celery import *
## BASE CASE
a.apply_async()
b.apply_async()
c.apply_async()
## BASE CHAIN CASE
chain(a.si())()
chain(a.si(), a.si())()
## BASE GROUP CASE
group(a.si(), b.si())()
## chain -> group nesting
chain(group(a.si(),b.si()))()
chain(group(a.si(),b.si()), group(c.si()))()
## chain -> (group -> chain), group
## EXPECTED (A, B, C, C) or (A, C, B, C)
## GOT A, C, B, C
chain(group(chain(a.si(),b.si()), c.si()), group(c.si()))()
## chain -> (group -> (chain -> group -> (task, task), task), group -> task), task
## *->*->*->*->. .->.
## \ \ \->. /
## \ \->*->. /
## \---------/
## EXPECTED (A, B, C, C, C) or (A, C, B, C, C)
## GOT A, B, C
## BROKEN CASE SEE:https://github.com/celery/celery/issues/1671
chain( group( chain( group( a.si(),b.si())), c.si()), group( c.si()), c.si())()
## group -> (chain, chain)
## EXPECTED A, B, A, B or A, A, B, B
## GOT A, A, B, B AND A, B, A, B
group(chain(a.si(), b.si()), chain(a.si(), b.si()))()
## group -> (chain -> (group), chain -> (group))
## EXPECTED
### A, A, B, B, C, C
### A, B, A, B, C, C
### B, B, A, A, C, C
### B, A, B, A, C, C
### B, A, A, B, C, C
### A, A, B, C, B, C
### A, B, A, C, B, C
### A, B, B, C, A, C
### B, A, A, C, B, C
### A, B, C, A, B, C
### A, B, C, B, A, C
### B, A, C, A, B, C
### B, A, C, B, A, C
group(chain(group(a.si(), b.si()), c.si()), chain(group(a.si(), b.si()), c.si()))()
## group -> chain -> (group, chain)
## EXPECTED
### A, B, A, B
### B, A, A, B
group(chain(group(a.si(), b.si()), chain(a.si(), b.si())))()
## group -> (chain -> (group, chain), task)
## EXPECTED
### C, A, B, A, B
### C, B, A, A, B
### A, C, B, A, B
### B, C, A, A, B
### A, B, C, A, B
### B, A, C, A, B
### A, B, A, C, B
### B, A, A, C, B
### A, B, A, B, C
### B, A, A, B, C
group(chain(group(a.si(), b.si()), chain(a.si(), b.si())), c.si())()
from celeryconfig import app
from celery import chord, group, chain
# Test Basic Chain functionality
@app.task
def a():
print 'A'
@app.task
def b():
print 'B'
@app.task
def c():
print 'C'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment