I nostri progetti al lavoro includono applicazioni sincrone (di breve durata) e asincrone Twisted (longeva). Stiamo ri-factoring del nostro database e stiamo andando a costruire un modulo API per disaccoppiare tutto l'SQL in quel modulo. Mi piacerebbe creare quell'API in modo che sia le applicazioni sincrone che quelle asincrone possano usarlo. Per le applicazioni sincrone mi piacerebbe che le chiamate all'API del database restituissero semplicemente i dati (bloccati) proprio come l'utilizzo di MySQLdb, ma per le applicazioni asincrone vorrei che le chiamate alle stesse funzioni/metodi API fossero non bloccanti, probabilmente restituendo un differito. Qualcuno ha qualche suggerimento, suggerimento o aiuto che potrebbe offrirmi per fare questo? Grazie in anticipo, DougPython Collegamenti intrecciati e database
risposta
Avete preso in prestito una pagina da continuation-passing style? Stackless Python supports continuations directly, se lo stai usando, e l'approccio sembra avere gained some interest già.
twisted.enterprise.adbapi sembra la strada da percorrere - pensi che non riesca a soddisfare le tue esigenze e, in caso affermativo, puoi spiegare perché?
All'interno di Twisted, si desidera sostanzialmente un wrapper attorno a una funzione che restituisce un rinvio (come il livello DB contorto), attende i risultati e li restituisce. Tuttavia, non è possibile attendere, poiché l'utilizzo dei cicli del reattore e il controllo di un'attività da completare utilizzando l'attesa di blocco non bloccata è probabilmente inefficiente.
InlineCallbacks o deferredGenerator risolvono il problema? Richiedono un moderno Twisted. See the twistedmatrix docs.
def thingummy():
thing = yield makeSomeRequestResultingInDeferred()
print thing #the result! hoorj!
thingummy = inlineCallbacks(thingummy)
Un'altra opzione sarebbe quella di avere due metodi che eseguono lo stesso modello SQL, uno che utilizza runInteraction, che blocca, e uno che utilizza RunQuery, che restituisce un differito, ma che comporterebbe ulteriori percorsi di codice che fanno la stessa cosa.
Tutte le librerie di database che ho visto sembrano ostinatamente sincrone.
Sembra che Twisted.enterprise.abapi risolva questo problema utilizzando un thread per gestire un pool di connessioni e avvolgere le librerie di database sottostanti. Questo ovviamente non è l'ideale, ma suppongo che funzionerebbe, ma in realtà non l'ho provato io stesso.
Idealmente ci sarebbe un modo per avere sqlalchemy e twisted integrated. Ho trovato questo progetto, nadbapi, che afferma di farlo, ma sembra che non sia stato aggiornato dal 2007.
- 1. utilizzando django e intrecciati insieme
- 2. Collegamenti database mancanti eclipse
- 3. Database Python e QuickBooks
- 4. collegamenti Python, come funziona?
- 5. database per Python ritorto
- 6. SSMS Snippets e collegamenti
- 7. Collegamenti SVN Python per Windows
- 8. cv2 e BGR2YCrCb non funzionano con i collegamenti Python
- 9. File.Copy() e collegamenti simbolici
- 10. Collegamenti bootstrap e visitati
- 11. Genera collegamenti Python, quali metodi/programmi usare
- 12. Come scaricare PDF da collegamenti raschiati [Python]?
- 13. Creazione ricorsiva di collegamenti temporali con python
- 14. Posso collegare i collegamenti a database in Oracle?
- 15. Come proteggi un database di collegamenti dallo scraping?
- 16. Intestazione appiccicosa e collegamenti interni
- 17. Qt5 e MacPorts: collegamenti mancanti
- 18. implementazione del database python
- 19. Mechanize e Python, facendo clic su href = "javascript: void (0);" collegamenti e ottenere la risposta indietro
- 20. tail -f accedere del server, dati di processo, quindi servono a client tramite intrecciati
- 21. database in memoria in Python
- 22. Database orizzontale e database verticale
- 23. L'elaborazione multiprocessing e database Python con pyodbc "non è sicuro"?
- 24. Perché django e python MySQLdb hanno un cursore per database?
- 25. Python e sqlite3 - importazione ed esportazione di database
- 26. Framework e strumenti per applicazioni di database Python
- 27. Trova collegamenti ipertestuali nel testo usando Python (twitter related)
- 28. Disposizione testo e collegamenti ipertestuali in Silverlight
- 29. Esistono collegamenti tra Haskell e LINQ?
- 30. Git - Collegamenti spezzati, alberi mancanti e penzolanti