Pull to refresh

Comments 11

интересная функция, однако я бы на Вашем месте выделил бы куски кода в функции, а то тройные вложенные циклы это круто :) сложно понять. простота кода — залог успеха :)
Большая часть тела функции — это модифицированный пример использования pycurl.CurlMulti, который, к сожалению, правильно не работал.

На самом деле, в саму функцию лезть особо не надо будет, практически все, что нужно для типичных задач покрывают параметры, передаваемые ей.
А двойные вложенные циклы — ну так pycurl устроен, вот чтобы не вспоминать каждый раз как это делать — я и сделал себе multi_get.
> К сожалению, Хабр убивает whitespace (indentation), без которого код на python не будет работать…

Можно использовать тэг <pre>
А можно еще использовать code2html прямо из дистрибутива, заменить лидирующие спейсы на
&nobsp; и получится тоже неплохо:

a = 1
while a < 10:
    a +=1
    print a

Пожалуй, да. Как в анекдоте: «Можно и так». :)
c.setopt(pycurl.NOSIGNAL, 1) — это зачем?
def removewww(a) — может лучше регуляркой, а то домен может быть examplewww.com
Только я сразу подумал что это отличная штука для DOS-а кого либо?
:)
А уж стандартный апачевский ab, наверное, и вовсе жуть несусветная?
Всем привет.
Спасибо автору за информацию про c-ares и некоторые пояснения по скрипту.
Поскольку сюда будут заходить интересующиеся, позволю себе упростить им жизнь. В свободное от работы время, я иногда пишу обертку над pycurl, которая упрощает API работы с pycurl. Стараюсь максимально приблизиться к python-request.

Думаю никто не будет спорить, что разобраться во всех принципах работы pycurl задача не очень простая, особенно в асинхронном модуле.

Библиотека human_curl доступна на гитхабе.

Вот пример использования асинхронного модуля human_curl:

from urlparse import urljoin 
from datetime import datetime

from human_curl.async import AsyncClient 
from human_curl.utils import stdout_debug

def success_callback(response, **kwargs):
    """This function call when response successed
    """
    print("success callback")
    print(response, response.request)
    print(kwargs)

def fail_callback(request, opener, **kwargs):
    """Collect errors
    """
    print("fail callback")
    print(request, opener)
    print(kwargs)

with AsyncClient(success_callback=success_callback,
                 fail_callback=fail_callback) as async_client:
    for x in xrange(10000):
        async_client.get('http://google.com/', params=(("x", str(x)),)
        async_client.get('http://google.com/', params=(("x", str(x)),),
                        success_callback=success_callback, fail_callback=fail_callback)



Обработку данных можно реализовать через систему колбэков.
Sign up to leave a comment.

Articles

Change theme settings