Найти - Пользователи
Полная версия: Многопоточный клиент (более 500 запросов)
Начало » Network » Многопоточный клиент (более 500 запросов)
1 2
slav0nic
В общем необходимо написать приложение (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
Может я нехорошо скажу, но для такой задачи я бы питон вообще не брал.
slav0nic
Ferroman
а pycurl на C ;)
Ferroman
Насчёт этого, я ничего не скажу - не знаю.
Лично я бы мучал Limbo. Но, єто во мне говорит жажда знаний :)
Андрей Светлов
Twisted или что-то еще, только не native OS threads. Исключительно non-blocking sockets.
Процессы и проч - решение не для этой задачи.

Кстати, есть интересный вариант: сделать
class GeneratorProto(twisted.internet.Protocol):


регистрировать в нем свой генератор а-ля python 2.5 - с send и throw.
Тогда вместо миллиона deferred можно обходиться одной функцией.
shiza
7. еще вариант asyncore

Была похожая задача. Прошел такой путь:
asyncore -> куча нитей -> куча нитей в каждой из которых по pycurl.Curl() -> pycurl.CurlMult

Мои выводы: pycurl.CurlMulti реально рулит (особенно в случае если получение данных занимает больше времени чем обработка).
slav0nic
shiza
asyncore - socket framework, сильно низко, мне и с куками работать и со всем остальным) лень делать много лишних телодвижений)
пожалуй попробую на pycurl, если не устроит - то гляну на twisted (хотя что-то у меня с ним не клеится=) )
clopomor
подивіться в сторону stackless python http://en.wikipedia.org/wiki/Stackless_Python
на ньому базувалась деякі онлайн ігри - із досить сильним навантаженням….
clopomor
EVA online, SecondLife і тд…
Андрей Светлов
clopomor
Явное невладение материалом. Как невытесняющая мультипоточка stackless может помочь при работе с сетью?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB