Differences between revisions 2 and 3
 ⇤ ← Revision 2 as of 2008-05-07 22:53:47 → Size: 1474 Editor: GlennTarbox Comment: ← Revision 3 as of 2008-05-07 23:57:57 → ⇥ Size: 1680 Editor: GlennTarbox Comment: Deletions are marked like this. Additions are marked like this. Line 32: Line 32: d = O.doComplicatedLengthyCalc(a,b,c) # returns deferred d = O.doComplicatedLengthyCalc(a, b, c) # returns deferred Line 37: Line 37: def gotResult2(result) def gotResult2(result, i2, s2, specialLabel) Line 39: Line 39: d.addCallback(fn2, ...) print i2, s2, specialLabel # will print "2, string2, special"d.addCallback(gotResult2, 2, "string2", specialLabel="special") Line 42: Line 43: This is a very important passage... but don't hurt your brain!! Line 46: Line 49: ...

# Concurrency

## We got Both Kinds

• I/O Bound
• Compute Bound

1. Just Wait... wasn't doing nothin' anyway
2. Spawn Process
4. Non-blocking calls and "a plan"

## Non-Blocking Calls

• Register Callback

```   1 O.registerCallback(fn, *args, **kargs) # fn can be function or method
2
3 def fn(result, *args, **kargs)
4   print "important message: ", result
```
• Use Deferreds

```   1 d = O.doComplicatedLengthyCalc(a, b, c) # returns deferred
2 def gotResult(result)
3   print "important message: ", result
4   return "a more important message"
`If you need to call a method that returns a deferred within your callback chain, just return that deferred, and the result of the secondary deferred's processing chain will become the result that gets passed to the next callback of the primary deferreds processing chain`