Как почти все знают, когда они сначала смотрят на потоки в Python, есть GIL, который делает жизнь несчастной для людей, которые на самом деле хотят обрабатывать параллельно - или, по крайней мере, дать ей шанс.
В настоящее время я смотрю на реализацию чего-то вроде шаблона Reactor. Фактически я хочу слушать входящие подключения сокета по одному потоку, а когда кто-то пытается подключиться, принять это соединение и передать его другому потоку, как для обработки.
Я еще не уверен, какую нагрузку я могу столкнуться. Я знаю, что в настоящее время настроено ограничение на входящие сообщения на 2 МБ. Теоретически мы могли получать тысячи в секунду (хотя я не знаю, видели ли мы практически что-то подобное). Количество времени, затрачиваемого на обработку сообщения, не очень важно, хотя, очевидно, быстрее будет лучше.
Я изучал шаблон Reactor и разработал небольшой пример, используя библиотеку multiprocessing
, которая (по крайней мере, в тестировании), кажется, работает нормально. Однако теперь/скоро у нас будет библиотека asyncio, которая будет обрабатывать цикл событий для меня.
Есть ли что-нибудь, что могло бы укусить меня, объединив asyncio
и multiprocessing
?