Немного инвертированный, но это должно работать:
def foo():
foo.counter += 1
print "Counter is %d" % foo.counter
foo.counter = 0
, Если Вы хотите встречный код инициализации наверху вместо нижней части, можно создать декоратора:
def static_var(varname, value):
def decorate(func):
setattr(func, varname, value)
return func
return decorate
Тогда используют код как это:
@static_var("counter", 0)
def foo():
foo.counter += 1
print "Counter is %d" % foo.counter
Это все еще потребует, чтобы Вы использовали foo.
префикс, к сожалению.
РЕДАКТИРОВАНИЕ (благодаря ony): Это выглядит еще более хорошим:
def static_vars(**kwargs):
def decorate(func):
for k in kwargs:
setattr(func, k, kwargs[k])
return func
return decorate
@static_vars(counter=0)
def foo():
foo.counter += 1
print "Counter is %d" % foo.counter
Вы уверены, что данные в порядке и нет проблем с файловой системой или производительностью системы? Несколько минут для базы данных в 20-30 мегабайт - это много. Я нахожусь на MacBook с 2 ГБ оперативной памяти, 320 ГБ HD и стандартным процессором 2,1 ГГц. Я взял одну из своих баз данных для быстрой проверки:
gavinlaking$ du -sm 2009-07-12.glis
74 2009-07-12.glis
gavinlaking$ mysql -pxxx -e "drop database glis"
gavinlaking$ mysql -pxxx -e "create database glis"
gavinlaking$ time mysql -pxxx glis < 2009-07-12.glis
real 0m17.009s
user 0m2.021s
sys 0m0.301s
17 секунд для файла размером 74 мегабайта. Мне это кажется довольно быстрым. Даже если он был в 4 раза больше (всего около 300 мегабайт), он завершился менее чем за 70 секунд.
There is an method for using LVM snapshots for backup and restore that might be an interesting option for you.
Instead of doing a mysqldump, consider using LVM to take snapshots of your MySQL data directories. Using LVM snapshots allow you to have nearly real time backup capability, support for all storage engines, and incredibly fast recovery. To quote from the link below,
"Recovery time is as fast as putting data back and standard MySQL crash recovery, and it can be reduced even further."
http://www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/
Убедитесь, что вы используете параметр - opt
для mysqldump при сбросе. Это будет использовать синтаксис массовой вставки, отложить обновление ключей и т. Д.
Если вы используете ТОЛЬКО таблицы MyISAM , вы можете безопасно скопировать их, остановив сервер, скопировав их на остановленный сервер и запустив его.
Если вы не хотите останавливать исходный сервер, вы можете сделать следующее:
Но я почти уверен, что ваш сервер копирования нужно остановить, когда вы установите их.