Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 4, 2013 02:51:44

DHT
От:
Зарегистрирован: 2009-09-24
Сообщения: 119
Репутация: +  0  -
Профиль   Отправить e-mail  

Асинхронное программирование под Windows на основе IOCP.

Перерыл весь инет. Нашел несколько библиотек, которые имеют полную/частичную поддержку IOCP, реализованную ctypes или pywin32, но не это главное.

Задача: считать первые 16 байт для 1 миллиона адресов, среди которых много нерабочих.
Сложность в том, что нужно под Windows, т.к. там быстро работает только IOCP, который мало где реализован.

Что пробовал:
1) pyuv. Известный Node.js использует libuv, к нему есть интерфейс на Python - pyuv, который так и не удалось установить ни на Windows 2007, ни на Windows Server 2003. Пробовал и через Visual Studiio и через MinGW.
2) Twisted - там IOCP мало где используется и толку особого не дает.
3) Asyncoro - очень медлненно почему-то, IPv6 вызывают ошибки.
4) Asyncake - без доков, вообще не понял что с ним делать. Но судя по коду IOCP там все же еще не доделано.
5) Cogen - вроде бы и довольно быстро работает, то тоже груда ошибок или я что-то делаю не так. Буду признателе за рабочий пример.



Офлайн

#2 Янв. 4, 2013 12:26:18

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Асинхронное программирование под Windows на основе IOCP.

libevent со 2 версии использует IOCP, вроде.

Офлайн

#3 Янв. 4, 2013 13:49:23

DHT
От:
Зарегистрирован: 2009-09-24
Сообщения: 119
Репутация: +  0  -
Профиль   Отправить e-mail  

Асинхронное программирование под Windows на основе IOCP.

s0rg
bevent со 2 версии использует IOCP, вроде.
Рассматривал libev, libevent, libevent2, libuv.
Судя по всему нормально IOCP работает только в libuv, но с pyuv никак не получается поработать.

Libevent2 also supports IOCP, via asynchronous bufferevents. However this feature is marked as experimental and neither libevent-http nor libevent-dns use it. Gevent does not wrap bufferevents, so gevent 0.13 is not benefiting from IOCP even if compiled with libevent2.
Источник: http://blog.gevent.org/2011/04/28/libev-and-libevent/



Офлайн

#4 Янв. 7, 2013 04:08:14

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Асинхронное программирование под Windows на основе IOCP.

DHT
Судя по всему нормально IOCP работает только в libuv, но с pyuv никак не получается поработать.
Какая версия Python'а? У меня python 3.3, на работе 32 разрядный виндовоз дома 64 разрядный, pyuv собирается без проблем.



Офлайн

#5 Янв. 7, 2013 11:09:03

DHT
От:
Зарегистрирован: 2009-09-24
Сообщения: 119
Репутация: +  0  -
Профиль   Отправить e-mail  

Асинхронное программирование под Windows на основе IOCP.

Python 2.7
Чем собираешь?



Офлайн

#6 Янв. 8, 2013 07:10:23

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Асинхронное программирование под Windows на основе IOCP.

Cлил исходники pyuv и libuv. Распаковал pyuv (обычно во временную папку), в папке с исходниками pyuv создал папку deps и в ней папку libuv, в эту папку распаковал исходники libuv, вернулся в корень исходников pyuv и в файле setup_libuv.py закомментировал 106 и 107 строки, после этого в командной строке выполнил: setup.py build –compiler=msvc bdist_wininst -o

ЗЫ. поскольку у Вас python 2.7 должна быть установлена Microsoft Visual Studio 2008, экспресс версии вполне достаточно



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version