I didn't use multiprocessing because this will live inside an apache/wsgi process. Forking the active process (which, if I understand correctly, is what multiprocessing does) seemed like it'd have consequences that I didn't want to consider.

These threads are indeed I/O bound (waiting on input from the network) -- this is a poor man's https://github.com/ross/requests-futures without the need for another library.