正在使用asyncio構建應用程序。我將使用sqlalchemy作爲orm。 從我所瞭解的scoped_session將會話與一個線程關聯起來,這樣他們就不會對彼此的操作。 現在,因爲asyncio在單個線程上工作,我相信scoped_session將無法正常工作,這將導致問題。 用asyncio使用sqlalchemy會話的正確方法是什麼?sqlalchemy scoped_session正確使用python asyncio
回答
答案取決於你的代碼。
一般而言,您可以使用sessionmaker創建會話工廠並自行使用它。
如果您的代碼具有隱式上下文,則可以使用scoped_session
和自定義scopefunc
,如example中所示。
隱式上下文可能會利用asyncio.Task.current_task()調用,但您還需要找到範圍會話銷燬的方法。
我不認爲你可以使用sqlalchemy與asyncio。 SQL Alchemy API全部阻塞,並且與asyncio不兼容。 http://techspot.zzzeek.org/2015/02/15/asynchronous-python-and-databases/
您可以與gevent異步使用SQL鍊金術不過,只要你能找到爲您的數據庫GEVENT兼容的驅動程序。而gevent的多形體很好地映射到scoped_session
。
編輯:實際上,它看起來像你可以使用SQL鍊金術與ASYNCIO只要你能找到你的數據庫的ASYNCIO兼容的驅動程序,如https://github.com/aio-libs/aiopg。至於scoped_session
,請使用current_task
並在您的Web框架的請求端將其銷燬。
我不想讓sqlalchemy異步。我想要做的是保持使用同一會話的任務不會同時發生,即任務不應共享會話。 – Shaumux
- 1. SQLAlchemy在多線程scoped_session
- 2. scoped_session(session_maker())或普通session_maker()在sqlalchemy?
- 3. Sqlalchemy scoped_session和「已附加」錯誤
- 4. SQLAlchemy:如何正確使用Relationship()?
- 5. Python 3 asyncio如何正確關閉客戶端連接
- 6. 關閉asyncio任務的正確方法
- 7. Python asyncio context
- 8. Python asyncio使用線程池嗎?
- 9. 使用Python ASYNCIO等待GPIO中斷
- 10. SQLAlchemy最佳實踐:何時/如何配置scoped_session?
- 11. 處理跨多個模塊scoped_session與SQLAlchemy的
- 12. SQLAlchemy scoped_session:獲取視圖的最佳方法
- 13. Python asyncio資源不可用
- 14. Python asyncio與Slack bot
- 15. scoped_session中的進程邊界
- 16. python:正確使用字典
- 17. Python:正確使用set_completion_display_matches_hook
- 18. 正確的mmap使用 - Python
- 19. 正確使用NTLK與python
- 20. Python SQLALCHEMY查詢使用MID()
- 21. 正確使用
- 22. 用Python的SQLAlchemy
- 23. 如何正確比較兩個SQLAlchemy Column對象與Python的unittest?
- 24. Python 3,SQLAlchemy,MySQL。在INSERT語句的語法不正確
- 25. Python asyncio簡單示例
- 26. Python asyncio:可中斷任務
- 27. Python asyncio培訓練習
- 28. Python asyncio任務排序
- 29. Django視圖中的Python Asyncio
- 30. Python的asyncio同步工作
scoped_session破壞的默認行爲是什麼?當線程關閉時它會被銷燬嗎?在這種情況下,在任務完成時是否會破壞? – Shaumux
'scoped_session'沒有析構函數,對不起。這就是爲什麼你需要上面例子中的信號訂閱。 –
如果我使用aiohttp框架,我需要在scoped_session函數的scopefunc參數中提供什麼類型的信號訂閱? @AndrewSvetlov –