python

Python __new__ method magic

Раньше почемуто казалось что метод _new_ в Python всегда должен возвращать инстанс собственного класа. На самом деле это вкорне неверно. Походу или мой склероз прогрессирует или нужно внимательней читать документацию. Эта фича дает реально нехилый буст для красивого АПИ Вот собственно примерчик: class C(object): def __init__(self): print ‘_init_ C’   class A(C): def __init__(self): super(A,self).__init__() [...]

Python urllib, urllib2 blocks

I found interesting thing about urllib and urllib2 Python libraries. Both them can accept Unicode urls, but there is a little invisible bug. If you pass urls in Unicode this will cause global lock for about 0.5sec(based on computer configuration). So use only urls encoded in ASCII.

PyQt QNetworkReply Segmentation fault

For my application i was need to save images from QWebView during load to global cache(memcache). For this purpose i rewrote  QNetworkAccessManager.createRequest so it return my QNetworkReply class that not delete content of request after QWebView read it. All was good, but when i update PyQt to version 4.7.3 i got Segmentation fault on QWebView.load(url). [...]

Делаем правельный рейтинг – Оценочный интервал Уилсона

Оценочный интервал Уилсона

Рейтинги это наверно один из самых важных функционалов которые можно найти практически на любом сайте или сервисе. Они дают возможность просто и быстро, а главное унифицировано выражать свое отношение к обьекту.

К сожалению многие рейтинги работают по крайне простым схемам особенно на обычных сайтах, что делает их подвержеными определенным проблемам.

MongoDB Map/Reduce raise exception: failed: db assertion failure

I created map/reduce functions to group tasks results in one result object, but when i try to use sorting it fail with exception: failed: db assertion failure

Блокировка в urllib и urllib2 при неблокирующих сокетах

Сегодня наткнулся на интересный баг в библиотеках Python urllib и urllib2.

Я пишу одну систему которая основана на библиотеке gevent, другими словами все действия выполняются асинхронно. Но сегодня заметил что при попытке скачать один сайт urllib2 блочил весь процес на стадии подключения к сайту. Покопавшись пару часиков, я нашел что данная либа может на долго блокировать процес, если переданный ей урл содержит какието ошибки или неправельно кодирован. Внимание даже если урл полностью в ASCII, его следует кодировать к примеру функцией urllib.quote_plus(url,’/:?=&’)

Если вы нашли в своих логах ошибку “Name or service not known”, то вероятней всего у вас именно эта проблема.

Get size of object in bytes in Python

Although Python >=2.6 have function to get size of object(sys.getsizeof), it’s work only for such objects like string,integer,float,bool,list,tuple. And it’s not work for dictionary,set and others, cause for them you need to rewrite __sizeof__ method. Main problem that in many cases writing function for getting real memory usage of your object may be very complicated. [...]

Simple local cache implementation for Python

Simple local cache implementation for Python

MongoDB Pool for gevent and pymongo packages

Wrote some simple implementation of pool for pymongo package under gevent coroutine library.

Base bug here was with pymongo.connection.Pool because in the original package it is thread-local, so when you spawn new greenlet and trying to get already open connection, it creates new connection because in this greenlet pool is empty. So if you will implement your own pool don’t forget about this.

Python generators and coroutines

Роясь в интернете нашел две замечательные презентации c PyCon 2008 и 2009.

Первая презентация расказывает о генераторах: http://www.dabeaz.com/generators/Generators.pdf

Вторая презентация рассказывает о сопрограммах(coroutines): http://www.dabeaz.com/coroutines/Coroutines.pdf

Крайне рекомендую к прочтению всем, даже тем кто знает о чем речь)