日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python3高并发定时更新任务进程池和线程池的使用

發布時間:2025/5/22 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3高并发定时更新任务进程池和线程池的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python3高并發定時更新任務進程池和線程池的使用

  • 背景:需要定時對數據庫的某一張表做更新
  • 不管用多線程還是多進程只能利用當前一臺機器的計算能力,可以考慮使用celery這樣的工具,后期可以橫向擴展celery的執行機,也不用考慮生產者消費者模型,celery里面自動都幫我們處理好了,也有消息隊列的機制,我們只負責往里面丟任務即可

Django中connections.close_all()的作用

  • 我們鏈接到mysql的時候,會創建一個鏈接,這個鏈接一般都有一個有效期,當新起一個進程的時候會fork父進程里的數據庫鏈接文件,但是這些鏈接文件可能馬上就失效了,萬一在我們子進程的任務中突然有一個鏈接失效就會報錯,所以在新起子進程的時候先執行一下這個命令,關閉舊鏈接,后面用了再創建自己的新鏈接即可
  • 數據庫鏈接超時的報錯不光有mysql gone away,還有各種游標報錯,None類型報錯等,都可能是由于鏈接超時或者錯誤關閉鏈接導致
  • 如果在子進程里使用了多進程,就會fork出好多鏈接文件,一不小心就會關閉還需要使用的鏈接,就會報錯,建議傳參的時候都穿hash_key,在子進程里再重新查詢獲取這個對象,這樣這個對象的生命周期就可以自己掌控了
  • 但是創建多線程的時候不存在fork,基本不會有斷聯的情況

進程池的使用

參考:https://www.cnblogs.com/kaituorensheng/p/4465768.html

這個雖然使用的是Python2,但是給的例子里除了print加括號以外,都是可以正常使用的

#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, )) #維持執行的進程總數為processes,當一個進程執行完畢后會添加新的進程進去print("Mark~ Mark~ Mark~~~~~~~~~~~~~~~~~~~~~~")pool.close()pool.join() #調用join之前,先調用close函數,否則會出錯。執行完close后不會有新的進程加入到pool,join函數等待所有子進程結束print("Sub-process(es) done.")

線程池的使用

參考:https://www.jianshu.com/p/b9b3d66aa0be

  • 注意:進程池創建進程的時候,里面第二個參數是元祖,而創建線程池的時候,里面第二個參數就是普通的參數

總結

以上是生活随笔為你收集整理的Python3高并发定时更新任务进程池和线程池的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。