START TRANSACTION/BEGIN, то любой запрос к другой базе приостанавливается — MySQL ждёт, когда вы закончите открытую транзакцию к первой базе.
Эксперименты, открытия и находки
START TRANSACTION/BEGIN, то любой запрос к другой базе приостанавливается — MySQL ждёт, когда вы закончите открытую транзакцию к первой базе.
В последнее время из-за излишней закрытости разработки MySQL компанией Sun Microsystems появилось много сторонних (например, от компании Google) патчей с улучшениями производительности и исправлениями ошибок, большинство из которых были включены в форк InnoDB под названием XtraDB, созданный компанией Percona.
q = PySQLPool.getNewQuery(connection)
with q: # внутренние запросы обёрнуты в транзакцию
q.Query('INSERT INTO peer SET PeerName=%s', (name,))class UdpTransport(asyncore.dispatcher, object):
def __init__(self, addr=None):
super(UdpTransport, self).__init__()
self.ignore_log_types = set() # Для вывода дополнительных ошибок в asyncore, подсмотрел в исходниках asyncore :)
self.create_socket(socket.AF_INET, socket.SOCK_DGRAM)
# Размер этого буфера очень важен
# Если входящий пакет будет больше него, остаток отбрасывается
self.ReadBufferSize = self.socket.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF)
if addr:
self.bind(addr) # Единственное отличие серверного сокета в использовании bind()
def handle_close(self):
self.close()
def writable(self):
return False
def handle_read(self):
try:
data, addr = self.recvfrom(self.ReadBufferSize)
except socket.error: # Исключение возникает при чтении данных из сокета: когда они заканчиваются, следующая попытка вылетает
pass
# обработка данных
def send(self, msg, toaddr):
self.socket.sendto(msg, toaddr)
handle_connect = handle_read # Нарыл где-то на просторах инета
# Без этого asyncore не работает с UDP, первую порцию данных он интерпретирует как инициализацию подключения
Наследуемся и от object для использования super и отладки с помощью метакласса.connect() для серверных сокетов, а вместо socket.send/recv нужно использовать методы sendto/recvfrom. Сперва я путался, в каких случаях что нужно применять — документация лаконична — но нашёл хороший источник с примерами, это наш родной `man`. ;) Например, `man bind` (или `man 2 bind`, если быть точным) показывает документацию С-шного сетевого API, обёрткой вокруг которого socket, собственно, и является. Если на вашем *nix такой странички нет, нужно установить пакет manpages-dev (в Debian и Ubuntu, по крайней мере).