2009-12-13 6 views
11

Ich habe in nicht-blockierende Server für Python (Tornado, twisted usw.) untersucht, aber eine Menge der Vorteile scheint verloren zu gehen, wenn es keine blockierungsfreie Verbindung zur Datenbank gibt. Weiß jemand, ob es irgendwelche Projekte gibt, die sich darum kümmern? (Von non-blocking a la node.js)Kennt jemand eine asynchrone MySQL-Lib für Python?

Edit: Geklärte meine Frage

Antwort

1

Die Art und Weise Sie das tun ist durch Datenbankabfragen in einem separaten Thread Laichen. Mit Twisted können Sie deferToThread() oder deferToThreadPool() verwenden (siehe API-Dokumentation 1).

+2

Darüber hinaus bietet twisted.enterprise.adbapi eine DB-API-ähnliche API auf "deferToThreadPool", um den Zugriff auf MySQL und andere rdbms in einer Twisted-basierten Anwendung zu erleichtern. –

13

Sie können Twisted's ADBAPI verwenden, um eine synchrone DBAPI-Implementierung zu umbrechen.

Z. B .:

from twisted.internet import reactor 
from twisted.enterprise import adbapi 

def result(rows): 
    for row in rows: 
     print row 

    reactor.stop() 

def fail(err): 
    err.printDetailedTraceback() 
    reactor.stop() 

pool = adbapi.ConnectionPool('sqlite3', 'animals.db') 
d = pool.runQuery('SELECT * FROM animals',()) 
d.addCallbacks(result, fail) 
reactor.run() 
4

Schauen Sie sich unsere neuen txMySQL project, die dies jetzt tun können.

Dies ist eine native asynchrone Implementierung des binären MySQL-Protokolls.

Verwandte Themen