python

 

Скрипт для проверки и автоматического восстановления MySQL БД

Особенно акутально для большого числа БД с MyISAM таблицами. Рекомендуется запускать периодически и после каждого аварийного перезабуска MySQL.

Требует: Python 2.x и MySQLdb (mysql-модуль для Python)

#!/usr/bin/env python
 
#########################################
# Check all tables in all mysql databases
#
# Written by Vladimir Rusinov <vladimir@greenmice.info>, http://greenmice.info/
#
# Reqirements:
#   Python 2.x (tested with 2.4)
#   MySQLdb
 
#########################################
# Settings:
 
host="localhost"
username="root"
password=""

Fortune #003

Одна из моих любимых цитат, с коротой я согласен наверное на 100%.

If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
/Tim Peters, "The Zen of Python"/

Перевод:

Если реализацию сложно объяснить, это плохая идея.
Если реализацию легко объяснить, это может быть хорошей идеей.
/Tim Peters, "The Zen of Python"/

Linkdump #0003

  1. RTPG: вебинтерфейс для rtorrent
  2. WWW SQL Designer - простенький визуальный дизайнер БД, работающий в браузере
  3. Серия статей "Частые ошибки программирования а Bash". Бегло просмотрев мои скриптики нашел некоторые из них.
  4. Видео: интересная обзорная презентация о Erlang и его применении в highload

CAFS

CAFS — это кеширующая read-only файловая система, которая может работать поверх локальной или сетевой ФС (sftp, samba, webdav, ...), а также может работать в offline (т.е. когда исходная фс недоступна).

Новости

12 февраля 2008

Доступен trac проекта.

20 декабря 2008

Версия 0.0.6: небольшие дополнения; фикс setup.py

Fortune #002

Special cases aren't special enough to break the rules. /Tim Peters, "The Zen of Python"/

Особые случаи не настолько особые, чтобы не соблюдать правила. /Тим Петерс, "The Zen of Python"/

Синхронизация потоков (мьютексы) в Python

Несмотря на GIL, Python не является полностью thread-safe. Поэтому в критических секциях (особенно в тех местах, где вызывается сишный код или сторонние бинарники) нужно использовать мьютексы (mutex), которые в Python представлены в виде объекта threading.Lock

Вот пример использования:

import threading
 
class MyClass:
    def __init__(self):
         self.lock = threading.Lock()
 
    def critical_function(self):
        self.lock.acquire() # заполучить лок
        do_something_important() # этот код гарантированно не будет прерван каким либо другим потоком

nginx, gzip_static и gzip файлов директории

nginx - отличный веб-сервер, который особенно удобно использовать в качестве фронтенда к большому апачу, кроме того, им очень удобно отдавать статику, и в нем много фишечек, которые могут сильно пригодиться при высокой нагрузке.

Вот одна из них:

"Модуль ngx_http_gzip_static_module позволяет отдавать вместо обычного файла предварительно сжатый файл с таким же именем и с суффиксом ".gz"."

Распространение модулей Python (distutils)

Не секрет, что у Python существует огромная стандартная библиотека с кучей модулей. Но кроме нее, существует просто огроменная коллекция модулей в pypi (Python Package Index).
Однако многие начинающие разработчики сталкиваются с проблемой распространения своих модулей. Можно конечно записать их все в архив и дать пользователям точные инструкции, как все это устанавливать. Однако это неудобно как для пользователей, так и для самих разработчиков. В python у этой проблемы есть простое и элегантное решение - создание стандартных пакетов при помощи модуля distutils.