在使用pyMySQL作為MySQL驅(qū)動(dòng)時(shí),在多線程模型下,如果我們沒有為每個(gè)線程創(chuàng)建一個(gè)單獨(dú)的連接的話,就會(huì)遇到下列錯(cuò)誤
創(chuàng)新互聯(lián)專注于北林網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供北林營銷型網(wǎng)站建設(shè),北林網(wǎng)站制作、北林網(wǎng)頁設(shè)計(jì)、北林網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造北林網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供北林網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
pymysql.err.InternalError: Packet sequence number wrong - got 0 expected 1
這是因?yàn)閜ymysql的threadsafety級(jí)別為 1: Threads may share the module, but not connections.
但是為每個(gè)線程創(chuàng)建單獨(dú)的連接的話,如果任務(wù)量比較大同時(shí)使用線程池的場景下,會(huì)造成client和MySQL server之間的頻繁“連接-登錄-退出”,這顯然是不優(yōu)雅的。所以我們需要一個(gè)“連接池”,以達(dá)到client和MySQL之間只需維持較少的連接,即可完成任務(wù)的效果。
筆者實(shí)現(xiàn)了一個(gè)基于pymysql的連接池模塊pymysql_pool
,包含兩個(gè)類
pymysql_pool.Connection類,繼承自pymysql.connections.Connection
類,在保證使用方法一致的前提下,增加了對(duì)連接池的維護(hù)
pymysql_pool.Connection
對(duì)象。這里的pymysql_pool.Connection
對(duì)象相比pymysql.connections.Connection
對(duì)象,增加了一個(gè)屬性來標(biāo)明該連接所屬的連接池,也正是通過該屬性來區(qū)分一個(gè)普通連接和一個(gè)池中的連接,進(jìn)而對(duì)連接對(duì)象的close()
方法和Context Manager Protocol
進(jìn)行不同的處理項(xiàng)目詳情請(qǐng)移步github