Python django使用多進(jìn)程連接mysql錯(cuò)誤的解決方法
問(wèn)題
mysql 查詢出現(xiàn)錯(cuò)誤
error: (2014, "Commands out of sync; you can't run this command now")1
查詢
mysql文檔中的解釋
If you get Commands out of sync; you can't run this command now in your client code, you are calling client functions in the wrong order.
This can happen, for example, if you are using mysql_use_result() and try to execute a new query before you have called mysql_free_result(). It can also happen if you try to execute two queries that return data without calling mysql_use_result() or mysql_store_result() in between.
調(diào)用順序錯(cuò)誤,同一個(gè)連接,發(fā)出2個(gè)查詢請(qǐng)求,第一個(gè)請(qǐng)求發(fā)出之后沒(méi)有等到mysql返回就發(fā)出第二個(gè)請(qǐng)求
背景 思考
我這里的程序是這樣的,在django框架中起了一個(gè)定時(shí)任務(wù),這個(gè)任務(wù)中有個(gè)循環(huán),主線程循環(huán)查詢mysql然后在循環(huán)體中生成了子進(jìn)程,子進(jìn)程中也有mysql查詢。
我測(cè)試了下不實(shí)用多進(jìn)程的情況沒(méi)有問(wèn)題,使用多進(jìn)程就會(huì)出現(xiàn)這個(gè)問(wèn)題。
對(duì)照上面的文檔,其實(shí)不難想到,錯(cuò)誤應(yīng)該是這樣的
- 父進(jìn)程和mysql建立的連接A,循環(huán)中fork出一個(gè)子進(jìn)程
- 子進(jìn)程保持了父進(jìn)程的變量,也就是擁有mysql連接A
- 子進(jìn)程去用連接A查詢mysql,父進(jìn)程這個(gè)時(shí)候也并發(fā)的使用連接A訪問(wèn)mysql
- 這樣很容易出現(xiàn)了上面Mysql提到的情況,結(jié)果就報(bào)錯(cuò)了
解決
解決的方案其實(shí)很容易想到,就是當(dāng)我們fork一個(gè)進(jìn)程之后,讓他從新獲取一個(gè)和mysql的連接C或者D就好了嘛,
結(jié)果幾個(gè)測(cè)試,得到如下的方案。
在父進(jìn)程的loop中,創(chuàng)建子進(jìn)程之前關(guān)閉mysql連接,這樣子進(jìn)程中就會(huì)重新連接mysql。
from django import db db.close_connection() p = Process(target=ap5mintes_scan, args=(ac, details, mtime)) p.start()
其實(shí)就是狀態(tài)copy的問(wèn)題,本來(lái)多個(gè)線程同時(shí)并發(fā)調(diào)用一個(gè)connection也不對(duì).
后面做了個(gè)測(cè)試 ,多進(jìn)程的情況下查看mysql processlist,的確使用建立多個(gè)mysql 連接。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python基礎(chǔ)教程之正則表達(dá)式基本語(yǔ)法以及re模塊
正則表達(dá)式是可以匹配文本片段的模式,今天的Python就跟大家一起討論一下python中的re模塊,python re模塊感興趣的朋友一起學(xué)習(xí)吧2016-03-03詳解python3實(shí)現(xiàn)的web端json通信協(xié)議
本篇文章主要介紹了python3實(shí)現(xiàn)的web端json通信協(xié)議,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12如何利用pandas工具輸出每行的索引值、及其對(duì)應(yīng)的行數(shù)據(jù)
這篇文章主要介紹了如何利用pandas工具輸出每行的索引值、及其對(duì)應(yīng)的行數(shù)據(jù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Python3 ID3決策樹判斷申請(qǐng)貸款是否成功的實(shí)現(xiàn)代碼
這篇文章主要介紹了Python3 ID3決策樹判斷申請(qǐng)貸款是否成功的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05