##### Всё хорошо
[Twisted][1] — асинхронный (событийно-ориентированный) фреймворк, написанный на Python. Мощное средство для быстрой разработки сетевых (и не только) сервисов. Он разработан с использованием паттерна проектирования [Reactor][2]. Сервисы созданные с использованием Twisted быстры и надежны, фреймворк позволяет не писать макаронный код, насыщенный непонятными коллбэками, имеет внутри себя красивые хелперы (Deferred, Transport, Protocol etc). Другими словами, делает нашу жизнь бекенд разработчиков лучше.
##### Но есть и проблемы
Основная проблема в том, что многочисленные, надежные, оттестированные, удобные библиотеки, использующие в своей основе синхронные модули Python (socket, os, ssl, time, select, thread, subprocess, sys, signal etc), просто возьмут и заблокируют нам основной процесс, цикл реактора и наступит беда. Такими библиотеками, к примеру, являются psycopg2, request, mysql и другие. В частности, psycopg2 используется в Django ORM как один из бекендов баз данных.
##### Что же делать?
Есть три пути. Сложный, приемлемый и хороший. Сложный — реализовать аналог библиотеки на Twisted. Приемлемый — использовать deferToThread и запускать синхронный код в отдельных потоках (используя пул потоков реализованный в Twisted). О хорошем пути (по моему мнению) и пойдет речь в заметке. [![Скрестить ежа с ужом][3]][4] [Читать дальше →][5]
[1]:
https://twistedmatrix.com/trac/
[2]:
https://en.wikipedia.org/wiki/Reactor_pattern
[3]:
https://habrastorage.org/files/603/884/7fb/6038847fb6d740b5b2abe5f02a8d01fb.jpg "Скрестить ежа с ужом"
[4]: /post/266887/
[5]:
http://habrahabr.ru/post/266887/#habracut