# multiprocessing



John Melesky
(PDX Python, June 2010)
---
# In the 2.6 standard library

Otherwise, available from PyPI (>=2.4)
---
# A note

`multiprocessing` is a huge library, and deserving of a full-fledged talk (or several), rather than a module-of-the-month.

The manager functionality, for example, is elaborate and useful.

---
# A note

`multiprocessing` is a huge library, and deserving of a full-fledged talk (or several), rather than a module-of-the-month.

The manager functionality, for example, is elaborate and useful (as far as i can tell. i haven't used it. this is still just a motm talk).

---
# A different note

`multiprocessing` is complex, and occasionally slightly hackish. Expect the following:

- These examples may not work in the REPL
- Similar arguments may have different semantics depending on whether they're passed to `Process` or `Pool`
- It "works" on Windows
- Overall, YMMV

---
# Pre-multiprocessing

- fork/exec
- threading
---
# Pre-multiprocessing

- fork/exec
- threading (inspired by Java!)
---
# Process

[sample process code](code/proc1.py)
---
# Process

- name, pid, exitcode, authkey
- `start()`
- `run()`
- `join([timeout])`
- `is_alive()`
- `terminate()`
- daemon
---
# Pool
[sample pool code](code/proc2.py)

---
# Pool

- `apply(func[, args[, kwds]])`
- `apply_async(ditto, plus callback)`
- `map`, `map_async`, `imap`, `imap_unordered`
- `close()`
- `terminate()`
- `join()`

---
# Queue

[(nonworking) sample queue code](code/proc3.py)

---
# Queue

See Queue.Queue

- `empty()`, `full()`, `qsize()`
- `put(item[, block[, timeout]])`
- `put_nowait(item)`
- `get([block[, timeout]])`
- `get_nowait()`

---
# Pipe

[(semiworking) sample pipe code](code/proc4.py)

---
# Connection

- `send(obj)`
- `recv()`
- `fileno()`
- `close()`
- `poll([timeout])`
- `send_bytes`, `recv_bytes`, `recv_bytes_into`

---
# Stuff i'm not covering

- `Lock`
- shared memory maps (`Value`, `Array`)
- `Manager`s, both local and remote
- Proxies
- `Namespace`
- `Listener` and `Client`
- lots of other stuff

---
# Final example

A [web scraper](code/scraper.py) with Process and Queue

---


