Прежде чем тратить время и силы на написание многопоточного приложения на Python, следует помнить, что существует Global Interpreter Lock (GIL), так что вы фактически не будете запускать более одного потока за один раз.
Это делает многопоточность непригодной для попыток использовать преимущества нескольких ядер или процессоров. Вы можете получить некоторое ускорение от мультиплексирования других ресурсов (сеть, диск, ...), но это никогда не было особенно заметно в моем опыте.
В общем, я использую потоки только тогда, когда одновременно происходит несколько логически отдельных задач, и все же я хочу, чтобы они все были в одной и той же виртуальной машине. Поток извлекает данные из Интернета и помещает их в очередь, в то время как другой поток выскакивает из очереди и записывает в базу данных, что-то в этом роде.
В Python 2.6 появился новый модуль multiprocessing
, который довольно крутой - он имеет интерфейс, очень похожий на модуль threading
, но на самом деле порождает новые процессы ОС, обходя GIL.