第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

多線程模式下aiosqlite和SQLite有什么區(qū)別?

多線程模式下aiosqlite和SQLite有什么區(qū)別?

函數(shù)式編程 2023-07-27 09:53:14
我正在嘗試異步處理多個(gè)文件,并且處理每個(gè)文件需要對(duì) SQLite 數(shù)據(jù)庫(kù)進(jìn)行一些讀取和寫入。我一直在尋找一些選項(xiàng),并找到了 aiosqlite 模塊。但是,我在閱讀了 SQLite 文檔,它說(shuō)它支持多線程模式。事實(shí)上,默認(rèn)模式是“序列化”,這意味著它“可以不受限制地被多個(gè)線程安全地使用”。我不明白有什么區(qū)別。aiosqlite 文檔說(shuō):aiosqlite 允許在主 AsyncIO 事件循環(huán)上與 SQLite 數(shù)據(jù)庫(kù)進(jìn)行交互,而不會(huì)在等待查詢或數(shù)據(jù)獲取時(shí)阻止其他協(xié)程的執(zhí)行。它通過(guò)每個(gè)連接使用一個(gè)共享線程來(lái)實(shí)現(xiàn)這一點(diǎn)。我知道 aiosqlite 和 sqlite 上的“多線程”模式之間存在差異,因?yàn)槎嗑€程模式每個(gè)線程只需要一個(gè)連接,而在 aiosqlite 中,您可以跨多個(gè)線程重用此單個(gè)連接。但這不是和序列化模式一樣“可以不受限制地被多個(gè)線程使用”嗎?編輯:我現(xiàn)在的問(wèn)題是“我目前的理解是否正確?”:“序列化”模式下的 Sqlite 可以同時(shí)被多個(gè)線程使用,因此如果我threading在 python 中使用該模塊并生成多個(gè)線程,則會(huì)使用此模式。在這里,我可以選擇每個(gè)線程使用單獨(dú)的連接或跨多個(gè)線程共享連接。aiosqlite 與 asyncio 一起使用。因此,由于 asyncio 有多個(gè)共享一個(gè)線程的協(xié)程,aiosqlite 也可以使用一個(gè)線程。因此,我創(chuàng)建了一個(gè)在所有協(xié)程之間共享的連接。由于 aiosqlite 基本上是 sqlite 的包裝器,因此我可以結(jié)合 1 和 2 的功能。因此我可以擁有多個(gè)線程,其中每個(gè)線程都有一個(gè)帶有多個(gè)協(xié)程的 asyncio 事件循環(huán)。因此,基本的 sqlite 功能將處理多線程,而 aiosqlite 將處理協(xié)程。
查看完整描述

1 回答

?
哆啦的時(shí)光機(jī)

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊

首先關(guān)于線程:

Sqlite ...可以同時(shí)被多個(gè)線程使用

由于GIL的原因,它仍然不會(huì)同時(shí)運(yùn)行,線程總是并發(fā)運(yùn)行(不是并行)。使用 GIL 唯一的問(wèn)題是你不知道線程何時(shí)會(huì)被中斷。但是 asyncio 允許您“手動(dòng)”在線程之間切換并等待某些 IO 操作(例如數(shù)據(jù)庫(kù)通信)。


讓我解釋一下不同模式之間的區(qū)別:

  • 單線程- 創(chuàng)建單個(gè)數(shù)據(jù)庫(kù)連接,無(wú)需任何互斥體或任何其他機(jī)制來(lái)防止多線程問(wèn)題。

  • 多線程- 使用互斥鎖創(chuàng)建單個(gè)共享數(shù)據(jù)庫(kù)連接,互斥鎖為每個(gè)與數(shù)據(jù)庫(kù)的操作/通信鎖定該連接。

  • 序列化- 每個(gè)線程創(chuàng)建多個(gè)數(shù)據(jù)庫(kù)連接。

回答更新中的問(wèn)題:

  1. 是的

    “序列化”模式下的 Sqlite 可以同時(shí)被多個(gè)線程使用,因此如果我在 python 中使用線程模塊并生成多個(gè)線程,則會(huì)使用此功能。在這里,我可以選擇每個(gè)線程使用單獨(dú)的連接或跨多個(gè)線程共享連接。

  2. 是的,它將在它們之間共享一個(gè)連接。

    aiosqlite 與 asyncio 一起使用。因此,由于 asyncio 有多個(gè)共享一個(gè)線程的協(xié)程,aiosqlite 也可以使用一個(gè)線程。所以我創(chuàng)建了一個(gè)在所有協(xié)程之間共享的連接

  3. 是的。

    由于 aiosqlite 基本上是 sqlite 的包裝器,因此我可以結(jié)合 1 和 2 的功能。因此我可以擁有多個(gè)線程,其中每個(gè)線程都有一個(gè)帶有多個(gè)協(xié)程的 asyncio 事件循環(huán)。因此,基本的 sqlite 功能將處理多線程,而 aiosqlite 將處理協(xié)程。


查看完整回答
反對(duì) 回復(fù) 2023-07-27
  • 1 回答
  • 0 關(guān)注
  • 238 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)