Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » Многопоточный клиент (более 500 запросов) [RSS Feed]

#1 Дек. 8, 2008 17:55:17

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Многопоточный клиент (более 500 запросов)

В общем необходимо написать приложение (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, может у кого-то будут какие-то предложения?

Офлайн

#2 Дек. 8, 2008 17:58:53

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Многопоточный клиент (более 500 запросов)

Может я нехорошо скажу, но для такой задачи я бы питон вообще не брал.

Офлайн

#3 Дек. 8, 2008 18:05:17

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Многопоточный клиент (более 500 запросов)

Ferroman
а pycurl на C ;)

Офлайн

#4 Дек. 8, 2008 18:08:44

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Многопоточный клиент (более 500 запросов)

Насчёт этого, я ничего не скажу - не знаю.
Лично я бы мучал Limbo. Но, єто во мне говорит жажда знаний :)

Офлайн

#5 Дек. 8, 2008 18:11:26

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Многопоточный клиент (более 500 запросов)

Twisted или что-то еще, только не native OS threads. Исключительно non-blocking sockets.
Процессы и проч - решение не для этой задачи.

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


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



Офлайн

#6 Дек. 8, 2008 18:11:31

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Многопоточный клиент (более 500 запросов)

7. еще вариант asyncore

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

Мои выводы: pycurl.CurlMulti реально рулит (особенно в случае если получение данных занимает больше времени чем обработка).



Отредактировано (Дек. 8, 2008 18:14:38)

Офлайн

#7 Дек. 8, 2008 18:30:28

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Многопоточный клиент (более 500 запросов)

shiza
asyncore - socket framework, сильно низко, мне и с куками работать и со всем остальным) лень делать много лишних телодвижений)
пожалуй попробую на pycurl, если не устроит - то гляну на twisted (хотя что-то у меня с ним не клеится=) )

Офлайн

#8 Дек. 9, 2008 14:42:30

clopomor
От:
Зарегистрирован: 2007-06-12
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Многопоточный клиент (более 500 запросов)

подивіться в сторону stackless python http://en.wikipedia.org/wiki/Stackless_Python
на ньому базувалась деякі онлайн ігри - із досить сильним навантаженням….



Офлайн

#9 Дек. 9, 2008 14:45:26

clopomor
От:
Зарегистрирован: 2007-06-12
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Многопоточный клиент (более 500 запросов)

EVA online, SecondLife і тд…



Офлайн

#10 Дек. 9, 2008 16:06:16

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Многопоточный клиент (более 500 запросов)

clopomor
Явное невладение материалом. Как невытесняющая мультипоточка stackless может помочь при работе с сетью?



Отредактировано (Дек. 9, 2008 16:06:53)

Офлайн

  • Начало
  • » Network
  • » Многопоточный клиент (более 500 запросов)[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version