Я не думаю, что существует любой способ сделать это в Python. Когда закрытие определяется, текущее состояние переменных в объеме включения получено и больше не имеет непосредственно referenceable имя (снаружи закрытия). Если бы необходимо было звонить foo()
снова, новое закрытие имело бы различный набор переменных от объема включения.
В Вашем простом примере, Вы могли бы быть более обеспеченным использованием класса:
class foo:
def __init__(self):
self.var_a = 2
self.var_b = 3
def __call__(self, x):
return self.var_a + self.var_b + x
localClosure = foo()
# Local closure is now "return 2 + 3 + x"
a = localClosure(1) # 2 + 3 + 1 == 6
# DO SOME MAGIC HERE TO TURN "var_a" of the closure into 0
# ...but what magic? Is this even possible?
localClosure.var_a = 0
# Local closure is now "return 0 + 3 + x"
b = localClosure(1) # 0 + 3 +1 == 4
, Если бы Вы используете эту технику, я больше не использовал бы имя localClosure
, потому что это больше не на самом деле закрытие. Однако это работает то же один.
Следующий сценарий оболочки будет запускаться в cron или периодически, при необходимости заменяйте переменные (значения по умолчанию написаны для FreeBSD):
# MySQL executable location
mysql=/usr/local/bin/mysql
# MySQLDump location
mysqldump=/usr/local/bin/mysqldump
# MySQL Username and password
userpassword=" --user=<username> --password=<password>"
# MySQL dump options
dumpoptions=" --quick --add-drop-table --add-locks --extended-insert"
# Databases
databases="db1 db2 db3"
# Backup Directory
backupdir=/usr/backups
# Flush and Lock
mysql $userpassword -e 'STOP SLAVE SQL_THREAD;'
set `date +'%Y %m %d'`
# Binary Log Positions
masterlogfile=`$mysql $userpassword -e 'SHOW SLAVE STATUS \G' | grep '[^_]Master_Log_File'`
masterlogpos=`$mysql $userpassword -e 'SHOW SLAVE STATUS \G' | grep 'Read_Master_Log_Pos'`
# Write Binlog Info
echo $masterlogfile >> ${backupdir}/info-$1-$2-$3.txt
echo $masterlogpos >> ${backupdir}/info-$1-$2-$3.txt
# Dump all of our databases
echo "Dumping MySQL Databases"
for database in $databases
do
$mysqldump $userpassword $dumpoptions $database | gzip - > ${backupdir}/${database}-$1-$2-$3.sql.gz
done
# Unlock
$mysql $userpassword -e 'START SLAVE'
echo "Dump Complete!"
exit 0
Второй вариант выглядит правильным.
Мне нужно было придумать способ делать дифференциальные резервные копии с помощью mysqldump. В итоге я написал сценарий, который выбирал, какие базы данных нужно резервировать, а затем запускал mysqldump. Не могли бы вы создать сценарий, который выполнял бы шаги, указанные в http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_master-data , и вызвать его из cron задание?
Просто мысль, но я предполагаю, что вы может добавить строку «CHANGE MASTER TO» в файл дампа, и он будет выполнен, когда вы восстановите / настроите новое ведомое устройство.