slav0nic
Дек. 8, 2008 17:55:17
В общем необходимо написать приложение (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
Дек. 8, 2008 17:58:53
Может я нехорошо скажу, но для такой задачи я бы питон вообще не брал.
slav0nic
Дек. 8, 2008 18:05:17
Ferroman
а pycurl на C ;)
Ferroman
Дек. 8, 2008 18:08:44
Насчёт этого, я ничего не скажу - не знаю.
Лично я бы мучал Limbo. Но, єто во мне говорит жажда знаний :)
Андрей Светлов
Дек. 8, 2008 18:11:26
Twisted или что-то еще, только не native OS threads. Исключительно non-blocking sockets.
Процессы и проч - решение не для этой задачи.
Кстати, есть интересный вариант: сделать
class GeneratorProto(twisted.internet.Protocol):
…
регистрировать в нем свой генератор а-ля python 2.5 - с send и throw.
Тогда вместо миллиона deferred можно обходиться одной функцией.
shiza
Дек. 8, 2008 18:11:31
7. еще вариант asyncore
Была похожая задача. Прошел такой путь:
asyncore -> куча нитей -> куча нитей в каждой из которых по pycurl.Curl() -> pycurl.CurlMult
Мои выводы: pycurl.CurlMulti реально рулит (особенно в случае если получение данных занимает больше времени чем обработка).
slav0nic
Дек. 8, 2008 18:30:28
shiza
asyncore - socket framework, сильно низко, мне и с куками работать и со всем остальным) лень делать много лишних телодвижений)
пожалуй попробую на pycurl, если не устроит - то гляну на twisted (хотя что-то у меня с ним не клеится=) )
clopomor
Дек. 9, 2008 14:42:30
подивіться в сторону stackless python
http://en.wikipedia.org/wiki/Stackless_Pythonна ньому базувалась деякі онлайн ігри - із досить сильним навантаженням….
clopomor
Дек. 9, 2008 14:45:26
EVA online, SecondLife і тд…
Андрей Светлов
Дек. 9, 2008 16:06:16
clopomor
Явное невладение материалом. Как невытесняющая мультипоточка stackless может помочь при работе с сетью?