Показаны сообщения с ярлыком Python. Показать все сообщения
Показаны сообщения с ярлыком Python. Показать все сообщения

среда, 21 декабря 2011 г.

Удобная работа с MySQL из Python посредством oursql

Зачем? Во-первых, MySQL DB в чистом виде черезчур аскетичен и нет таких удобных вещей как плейсхолдеров (параметризированных запросов), а без них работать с MySQL совершенно не камильфо. Модуль написан на C, так что не стоит бояться тормозов.

Ставим зависимости:
apt-get install -y libmysqlclient-dev python-mysqldb

Собираем oursql:
pip install oursql

Вот пример кода, которого достаточно для удобной работы с MySQL:
#!/usr/bin/python

import oursql
import stat_config

conn = oursql.connect(host='127.0.0.1', user='db_user', passwd='db_password', db='db_name')

# return rows as dicts
curs = conn.cursor(oursql.DictCursor)

# return row as arrays
# curs = conn.cursor()

curs.execute("SELECT * FROM domains WHERE domain_id = ? LIMIT ?", (1, 10))

for row in curs:
print row

Визуально, модуль работает не просто быстро, а ОЧЕНЬ быстро! Что очень радует!

Офсайт: http://packages.python.org/oursql/

Профилирование проектов на Python

apt-get install -y python-profiler

Запускаем скрипт:
python -m profile login_to_mysql.py
test data
6 function calls in 0.000 CPU seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 :0(execfile)
1 0.000 0.000 0.000 0.000 :0(setprofile)
1 0.000 0.000 0.000 0.000 :1()
1 0.000 0.000 0.000 0.000 login_to_mysql.py:3()
1 0.000 0.000 0.000 0.000 profile:0(execfile('login_to_mysql.py'))
0 0.000 0.000 profile:0(profiler)
1 0.000 0.000 0.000 0.000 testinclude.py:4()

Вот так вот легко и просто :)

суббота, 17 декабря 2011 г.

Использование замкнутых циклов в Python

Возможно, с темой поста не все так гладко, но постараюсь описать, что я хотел. Имеется задача - создается заданное число классов и каждый класс должен получить при иницилизации 1 из нескольких (адреса серверов) идентификаторов. Как это реализовать красиво и нэтивно? Сразу в голову пришел кольцевой цикл и он, оказывается, уже есть в Питоне :)

Вот такой простенький код:
from itertools import cycle
my_cycle = cycle( [1,2,3] )
>>> print my_cycle.next()
1
>>> print my_cycle.next()
2
>>> print my_cycle.next()
3
>>> print my_cycle.next()
1
>>> print my_cycle.next()
2
>>> print my_cycle.next()
3

пятница, 16 декабря 2011 г.

pip или easy_install?

Есди верить официальной документации pip, то именно его нужно использовать, так как он являестя более новой заменой для easy_install:
pip is a tool for installing and managing Python packages, such as those found in the Python Package Index. It’s a replacement for easy_install.

Кроме этого, у pip есть функция uninstall, которая ставит его на голову выше easy_install!

Установка на Debian:
apt-get install -y python-pip

Источник: http://www.pip-installer.org/en/latest/index.html

Встрчайте приемника Pylons - Pyramid !

http://www.pylonsproject.org/

Простейшее многопоточное приложение на Python

#!/usr/bin/python

from threading import Thread
import time

class testThread(Thread):
def __init__(self, number):
Thread.__init__(self)
self.number = number
def run(self):
time.sleep(2)
print "Hello from thread %d" % self.number


threads_list = []
for i in range (1,10):
test_thread_object = testThread(i)
threads_list.append(test_thread_object)
test_thread_object.start()

for thread in threads_list:
thread.join()

Вот трейс исполнения:
time python threads.py
Hello from thread 3Hello from thread 1
Hello from thread 5

Hello from thread 6
Hello from thread 4Hello from thread 2
Hello from thread 7Hello from thread 9

Hello from thread 8


real 0m2.050s
user 0m0.035s
sys 0m0.015s

Вообще, очень красиво и лаконично все. Да и по отзывам, в отличие от Перла, у Питона с многопоточностью все хорошо.

Источники: http://www.wellho.net/solutions/python-python-threads-a-first-example.html и http://docs.python.org/library/threading.html#thread-objects

четверг, 15 декабря 2011 г.

Отличная статья по асинхронному DNS резволвингу посредством adns из Python

http://www.catonmat.net/blog/asynchronous-dns-resolution/

Ставить сие чудо очень просто:
apt-get install -y python-adns

Результаты обоих вариантов (slow и fast) на моей машине примерно следующие:
python slow.py
It took 31.14 seconds to resolve 100 hosts.
python fast.py
It took 7.30 seconds to resolve 100 hosts.

Это при условии, что на машине работал локальный DNS резольвер (PowerDNS).

четверг, 16 июня 2011 г.

Быстрая проверка IP на принадлежность к сети на Python

Устанавливаем необходимое ПО (я работаю на Debian Squeeze):
apt-get install -y python-subnettree

Легкая проверка IP на принадлежность сети:
import SubnetTree

t = SubnetTree.SubnetTree()

t["192.168.1.1/24"] = "Network 1"
print '192.168.1.33' in t
print '192.168.13.33' in t

Выдача команды будет следующая:
True
False

Все это дело можно обернуть в простенький скриптик:
#!/usr/bin/python

import SubnetTree
import sys

t = SubnetTree.SubnetTree()
t["192.168.1.1/24"] = "Network 1"

if len(sys.argv) != 2:
print "Need params"
sys.exit(1)

print sys.argv[1] in t


$ python checkip.py 127.0.0.1
False
$ python checkip.py 192.168.1.4
True
Аналогичнй код на Perl: http://www.stableit.ru/2013/04/ip-perl.html 

среда, 15 июня 2011 г.

Получение всех IP сети на Python

Устанавливаем все необходимое (у меня Debian Squeeze):
apt-get install -y python-ipcalc

Вот простейший код, который выведет все возможные IP в сети: 192.168.1.0/24
from ipcalc import IP, Network
for ip in Network('192.168.1.0/24'):
print ip

Выдача скрипта будет следующая:
192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3
...
192.168.1.246
192.168.1.247
192.168.1.248
192.168.1.249
192.168.1.250
192.168.1.251
192.168.1.252
192.168.1.253
192.168.1.254
192.168.1.255

воскресенье, 16 января 2011 г.

Установка Django на Mac OS X 10.5.8

cd
curl -oDjango-1.2.5.tar.gz http://media.djangoproject.com/releases/1.2/Django-1.2.5.tar.gz
tar -xf Django-1.2.5.tar.gz
cd Django-1.2.5
sudo python setup.py install

Убеждаемся, что Django встал, как требуется:
cd
python
Python 2.5.1 (r251:54863, Sep 1 2010, 22:03:14)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> print django.get_version()
1.2.5
>>>

mkdir testdjango
django-admin.py startproject mysite
cd mysite
python manage.py runserver