[Python] вопрос/ответ.

Discussion in 'Python' started by De-visible, 21 Jan 2009.

  1. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Тоже не знаю такой возможности, но можно спокойно использовать threading.Condition или создать свой какой-нибудь флаг, и при выставлении его в положение True выходить из потока, я обхожусь так. В принципе немного неудобно, но я привык, и ничего страшного. В принципе на каждую ситуацию находятся свои решения. Меня больше интересует разделение потоков по группам. Вот это мне было бы интереснее, ато шас все потоки безликие.
     
  2. Vaal

    Vaal New Member

    Joined:
    8 Jan 2010
    Messages:
    37
    Likes Received:
    2
    Reputations:
    0
    очередная проблема
    парсим лог чата, в базу
    http://dumpz.org/21255/
    http://slil.ru/29487987

    на локалке вместе кириллицы в базе получаем что-то вроде
    Code:
    говоришь по русски?
    т.е. UTF и без проблем все это выводим через пхп на сайт, где отображается уже по русски
    система русская winxpsp3

    на другой системе английской win server 2003 sp2
    в базе получаю вот такую ерунду
    Code:
    ???? ???? ???‹ ???? ???°???°?»?‹
    
    и на сайте получаем теже знаки вопроса

    структура таблиц одинаковая
    кодировка cp1251_general_ci

    перепробовал различные вариации перекодирования и т.п. с unicode, decode, encode

    либо ничего не изменялось
    либо начинало сыпать подобными ошибками, которые победить не удалось
    Code:
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xd1 in position 0: ordinal not in range(128)
    причем не только в случаи строк с кириллицей
     
  3. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Попробуй так:
    Code:
            for chatlogline in open(chatfiles):
                chatlogline = chatlogline.decode("utf-8", "replace").encode("cp1251")
                if ' COALITION ' in chatlogline:
    
    
     
  4. Vaal

    Vaal New Member

    Joined:
    8 Jan 2010
    Messages:
    37
    Likes Received:
    2
    Reputations:
    0
    на локальной машине все так же работает, но в базе вместо utf - кириллица

    на другой машине в базе также знаки вопроса
    ???? - ????????
    но судя по всему только вместо символов букв, символы типа !- нормально отображаются
     
  5. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Ну смотри, я тебе пытаюсь подсказать, как правильно занести в базу чтоб там была кириллица. Как там пхп его уже выведет - то эт твоя забота/прямота рук :)))Так вот, в случае с первой машиной - все ОК, в базе-кириллица. А вот в случае со второй машиной - проверяй кодировку базы на второй машине, там стопудово не cp1251.

    P.S. Стандартные символы типа точки, запятой и т.д. имеют одинаковый номер в разных кодировках, поэтому они почти всегда обрабатываются корректно.
     
  6. Vaal

    Vaal New Member

    Joined:
    8 Jan 2010
    Messages:
    37
    Likes Received:
    2
    Reputations:
    0
    разница есть в деофолтной кодировке mysql
    у меня - Windows Cyrillic (cp1251)
    а на удаленной UTF-8 Unicode (utf8)

    в самой базе, таблицах и ячейках и там и там
    cp1251_general_ci
    я просто взял базу с локальной машины, очистил её и залил на удаленную, т.е структура таже

    p.s. еще такой момент, через пхп можно добавлять комменты, комменты с кирилицей без проблем добавляются в туже базу и нормально отображаются
     
    #706 Vaal, 22 Jul 2010
    Last edited: 22 Jul 2010
    1 person likes this.
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Vaal перед циклом записи в БД попробуйте явно указать кодировку соединения. db.query("SET NAMES 'cp1251'"). Аналогично и в ПХП

    И попробуйте посмотреть системные переменные мускуля при соединении через ПХП и питон с помощью запроса 'SHOW VARIABLES'

     
    _________________________
    1 person likes this.
  8. Vaal

    Vaal New Member

    Joined:
    8 Jan 2010
    Messages:
    37
    Likes Received:
    2
    Reputations:
    0
    db.query("SET NAMES 'cp1251'")
    Спасибо! помогло

    SHOW VARIABLES через питон
    character_set_client latin1
    character_set_connection latin1
    character_set_results latin1

    через пхп
    character_set_client latin1
    character_set_connection latin1
    character_set_results latin1

    а если выполнить запрос в пхпмайадмин
    character_set_client utf8
    character_set_connection cp1251
    character_set_results utf8
     
  9. Vid0k

    Vid0k Elder - Старейшина

    Joined:
    24 Dec 2007
    Messages:
    393
    Likes Received:
    125
    Reputations:
    13
    народ помогите чот не могу регулярку написать
    нужно выбрать весь текст между
    Code:
    <div style="color:#00659a; font:18px arial;">{text}Read More</a></div> 
    
     
    1 person likes this.
  10. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Vid0k
    Code:
    import re
    dat = '''<div style="color:#00659a; font:18px arial;">{text}Read More</a></div>'''
    
    print re.search(r'''(?msi)<div style="color:#00659a; font:18px arial;">(.*?)Read More</a></div>''', dat).group(1)
     
    _________________________
    1 person likes this.
  11. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Есть у кого нибудь рецепт, как заставить urllib2 ходить через сокс прокси. Для одной прокси делаю грязный хак с помощью SocksiPy так:
    Code:
    import socks, urllib2
    
    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,"proxy", 1080)
    urllib2.socket.socket = socks.socksocket
    
    req = urllib2.Request('http://internet.yandex.ru')
    print urllib2.urlopen(req).read()
    
    Но работа через несколько проксей паралельно представляется проблематичной
     
    _________________________
  12. ЕгоАкк

    ЕгоАкк Banned

    Joined:
    21 Sep 2009
    Messages:
    84
    Likes Received:
    18
    Reputations:
    0
    Забей на него и используй pycurl.
     
  13. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    ЕгоАкк да, забыл написать, pycurl идет лесом - незачем плодить сущности и зависимости, если можно обойтись стандартной библиотекой + легковесным встраиваемым модулем

    Тем более что под py2.6 нет бинарника виндового
     
    _________________________
    #713 Gifts, 27 Jul 2010
    Last edited: 27 Jul 2010
  14. ЕгоАкк

    ЕгоАкк Banned

    Joined:
    21 Sep 2009
    Messages:
    84
    Likes Received:
    18
    Reputations:
    0
    SocksiPy подменяет собой стандартную функцию создания сокета в модуле, так что вряд ли что с ним выйдет сделать, хотя думуаю, что если заменить треды на форки, то может чего и выйдет.

    >легковесным встраиваемым модулем
    Скриптовые языки для того, чтобы экономить свое время, а не ресурсы, к тому же curl на C всяко быстрее urllib, и еще возможности curl гораздо богаче.

    >Тем более что под py2.6 нет бинарника виндового
    Никто не мешает поставить два питона.
     
  15. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Есть бинарники под 2.6. Лично качал предпоследнюю версию, правда так и не понял, зачем. Решения относительно использования соксов совместно с urllib2 не нашел, ищу уже длительное время, есть мысли зарыться в дебри механайза и приделать недостающее, но пока лезть туда страшно. Еще есть мысля разобраться в том как работает асинхронный I/O и добиться до Twisted.
     
    #715 login999, 27 Jul 2010
    Last edited: 27 Jul 2010
  16. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    ^^^^
     
  17. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    http://code.google.com/p/urllib4/downloads/detail?name=pycurl-ssl-7.19.0.win32-py2.6.msi&can=2&q=

    Бинарник CURL под 2.6, НеОфф. У себя ставил и запускал, он работал, но на всю катушку не проверял, поэтому качаем на свой страх и риск.
     
    1 person likes this.
  18. ЕгоАкк

    ЕгоАкк Banned

    Joined:
    21 Sep 2009
    Messages:
    84
    Likes Received:
    18
    Reputations:
    0
    > О да, форки - офигенная мысля, прям в лучших традициях жанра пхп-шных костылей

    Если вы смотрите на мир через призму пэхопэ, то не знаю что и возразить. Может вам в интернет не ходить? А то ведь вы этим способствуете форканью апача. И да, про форки было только в контексте теоретического решения, а не призыв к их использованию.

    > Обратно-таки пхпшные костыли, вау. Нагрузка на процессор конечно же роли не играет, угу. Почему-то у меня получается экономить и время и ресурсы, как так ? О_о

    Curl изначально сишная библиотека.
    Вы хотите сказать, что urllib писаный на питоне работает быстрее модуля на Си?

    Как вы экономите время? Когда мне нужно прокси я делаю так:
    curl.setopt(curl.PROXYTYPE, proxy[0]) # любой тип прокси
    curl.setopt(curl.PROXY, proxy[1])
    curl.setopt(curl.PROXYPORT, proxy[2])
    А вы в этом случае обламываетесь.

    >Очередная мега идея в духе "не могу добиться нормальной работы, поэтому сделаю как-нибудь
    Ну тут уж без комментариев.


    Глянул вашу поделку https://forum.antichat.ru/thread147762.html (посмотреть можно в кэше гугла http://dumpz.org/9729/)

    Мало того, что вы там изгаляетесь с сокетами аки крутой h4xx0r, так вы еще и не знаете о том, что можно использовать gzip сжатие страниц, которое позволило бы в разы сохранить трафик и ускорить работу.
    Я получил окончательную оценку вашей компетенции, и на этом считаю спор закрытым.
     
    #718 ЕгоАкк, 27 Jul 2010
    Last edited: 27 Jul 2010
  19. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Я их не использую, а потому другим не рекомендую использовать. Почему вы рекомендуете людям форки, хотя сами их не используете ?
    Быстрее - не думаю, "легче" - да. И если уж говорить о скорости в сетевых задачах - посмотрите в сторону Twisted. Сомневаюсь что CURL его сделает, а если и сделает то он будет ненамного быстрее, зато ценой нагрузки на машину.

    Да ну? А по-моему соксы не так уж сильно и востребованы, людям обычно и http проксей хватает.

    Конечно без комментариев, а что комментировать? То что с каждым новым релизом интерпретатора разработчики стараются перепрыгнуть на более новую версию, а вы все также застываете на одной, к которой вы привязаны из-за вашего любимого CURL. Очень Python-ично.
     
    #719 login999, 27 Jul 2010
    Last edited: 27 Jul 2010
  20. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Не вам оценивать мою компетенцию, тем более не предоставив никаких доказательств своей компетенции.

    P.S. Не считаю необходимым доказывать кому-либо свою компетенцию.