Форум сайта python.su
В общем необходимо написать приложение (HTTP Client)способное порождать более 1к одновременных запросов.
Рассматриваю варианты:
1. Если это делать через тредпулы, то всё упирается в ограничение в питоне, это около 300 тредов на 1 процесс, увеличивается при помощи изменения threading.stack_size но имхо глупо порождать 1к потоков…
2. Форки, и в каждом форке по ~300 тредов, но по-моему в питоне это не прокатит, тк GIL и green threads как таковые… (возможно не прав, как я помню всё будет выполняться в одном интерпретаторе или нет? )
3. Twisted - имхо не самый лучший вариант, тк твистед довольно “монструозный”, хотя и не самый худший )
4. python 2.6 - Multiprocessing (лишь пролистал доки), пока не сильно хочется с 2.5 переходить
5. python 2.5 - Python parallel
6. pycurl.CurlMulti - асинхронная штука, но пока в плотную не разбирался
имхо пока что имхо более приемлемы #6 и 5, может у кого-то будут какие-то предложения?
Офлайн
Может я нехорошо скажу, но для такой задачи я бы питон вообще не брал.
Офлайн
Ferroman
а pycurl на C ;)
Офлайн
Насчёт этого, я ничего не скажу - не знаю.
Лично я бы мучал Limbo. Но, єто во мне говорит жажда знаний :)
Офлайн
Twisted или что-то еще, только не native OS threads. Исключительно non-blocking sockets.
Процессы и проч - решение не для этой задачи.
Кстати, есть интересный вариант: сделать
class GeneratorProto(twisted.internet.Protocol):
…
регистрировать в нем свой генератор а-ля python 2.5 - с send и throw.
Тогда вместо миллиона deferred можно обходиться одной функцией.
Офлайн
7. еще вариант asyncore
Была похожая задача. Прошел такой путь:
asyncore -> куча нитей -> куча нитей в каждой из которых по pycurl.Curl() -> pycurl.CurlMult
Мои выводы: pycurl.CurlMulti реально рулит (особенно в случае если получение данных занимает больше времени чем обработка).
Отредактировано (Дек. 8, 2008 18:14:38)
Офлайн
shiza
asyncore - socket framework, сильно низко, мне и с куками работать и со всем остальным) лень делать много лишних телодвижений)
пожалуй попробую на pycurl, если не устроит - то гляну на twisted (хотя что-то у меня с ним не клеится=) )
Офлайн
подивіться в сторону stackless python http://en.wikipedia.org/wiki/Stackless_Python
на ньому базувалась деякі онлайн ігри - із досить сильним навантаженням….
Офлайн
EVA online, SecondLife і тд…
Офлайн
clopomor
Явное невладение материалом. Как невытесняющая мультипоточка stackless может помочь при работе с сетью?
Отредактировано (Дек. 9, 2008 16:06:53)
Офлайн