Python3高并发定时更新任务进程池和线程池的使用
生活随笔
收集整理的這篇文章主要介紹了
Python3高并发定时更新任务进程池和线程池的使用
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Python3高并發(fā)定時(shí)更新任務(wù)進(jìn)程池和線(xiàn)程池的使用
- 背景:需要定時(shí)對(duì)數(shù)據(jù)庫(kù)的某一張表做更新
- 不管用多線(xiàn)程還是多進(jìn)程只能利用當(dāng)前一臺(tái)機(jī)器的計(jì)算能力,可以考慮使用celery這樣的工具,后期可以橫向擴(kuò)展celery的執(zhí)行機(jī),也不用考慮生產(chǎn)者消費(fèi)者模型,celery里面自動(dòng)都幫我們處理好了,也有消息隊(duì)列的機(jī)制,我們只負(fù)責(zé)往里面丟任務(wù)即可
Django中connections.close_all()的作用
- 我們鏈接到mysql的時(shí)候,會(huì)創(chuàng)建一個(gè)鏈接,這個(gè)鏈接一般都有一個(gè)有效期,當(dāng)新起一個(gè)進(jìn)程的時(shí)候會(huì)fork父進(jìn)程里的數(shù)據(jù)庫(kù)鏈接文件,但是這些鏈接文件可能馬上就失效了,萬(wàn)一在我們子進(jìn)程的任務(wù)中突然有一個(gè)鏈接失效就會(huì)報(bào)錯(cuò),所以在新起子進(jìn)程的時(shí)候先執(zhí)行一下這個(gè)命令,關(guān)閉舊鏈接,后面用了再創(chuàng)建自己的新鏈接即可
- 數(shù)據(jù)庫(kù)鏈接超時(shí)的報(bào)錯(cuò)不光有mysql gone away,還有各種游標(biāo)報(bào)錯(cuò),None類(lèi)型報(bào)錯(cuò)等,都可能是由于鏈接超時(shí)或者錯(cuò)誤關(guān)閉鏈接導(dǎo)致
- 如果在子進(jìn)程里使用了多進(jìn)程,就會(huì)fork出好多鏈接文件,一不小心就會(huì)關(guān)閉還需要使用的鏈接,就會(huì)報(bào)錯(cuò),建議傳參的時(shí)候都穿hash_key,在子進(jìn)程里再重新查詢(xún)獲取這個(gè)對(duì)象,這樣這個(gè)對(duì)象的生命周期就可以自己掌控了
- 但是創(chuàng)建多線(xiàn)程的時(shí)候不存在fork,基本不會(huì)有斷聯(lián)的情況
進(jìn)程池的使用
參考:https://www.cnblogs.com/kaituorensheng/p/4465768.html
這個(gè)雖然使用的是Python2,但是給的例子里除了print加括號(hào)以外,都是可以正常使用的
#coding: utf-8 import multiprocessing import timedef func(msg):print("msg:", msg)time.sleep(3)print("end")if __name__ == "__main__":pool = multiprocessing.Pool(processes = 3)for i in xrange(4):msg = "hello %d" %(i)pool.apply_async(func, (msg, )) #維持執(zhí)行的進(jìn)程總數(shù)為processes,當(dāng)一個(gè)進(jìn)程執(zhí)行完畢后會(huì)添加新的進(jìn)程進(jìn)去print("Mark~ Mark~ Mark~~~~~~~~~~~~~~~~~~~~~~")pool.close()pool.join() #調(diào)用join之前,先調(diào)用close函數(shù),否則會(huì)出錯(cuò)。執(zhí)行完close后不會(huì)有新的進(jìn)程加入到pool,join函數(shù)等待所有子進(jìn)程結(jié)束print("Sub-process(es) done.")線(xiàn)程池的使用
參考:https://www.jianshu.com/p/b9b3d66aa0be
- 注意:進(jìn)程池創(chuàng)建進(jìn)程的時(shí)候,里面第二個(gè)參數(shù)是元祖,而創(chuàng)建線(xiàn)程池的時(shí)候,里面第二個(gè)參數(shù)就是普通的參數(shù)
總結(jié)
以上是生活随笔為你收集整理的Python3高并发定时更新任务进程池和线程池的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Elasticsearch查询相关总结以
- 下一篇: 使用Python和OpenCV检测图片上