python3多線程

最近在做爬蟲,語音,視頻合成,需要使用多線程,多進程的模型。做個學習使用記錄。

使用多線程還是使用多進程,怎么樣來控制防止線程太多,導致線程失控,就是請求一個任務,生成一個進程,最終導致進程暴漲,進而無法控制。所以,對于任務數(shù)量一直在增加的程序,固定線程數(shù)量的線程池是必要的。

  1. 一些說明:

    • 單進程因為處理過程中因為io或者密集計算導致延遲太多,耗時太多,運行一次太累。
    • 使用多線程,多進程能一定程度的上解決這個問題,但是需要多少個線程(進程)這個需要詳細的測試。
  2. 最佳線程數(shù)的獲取:

    • 過用戶慢慢遞增來進行性能壓測,觀察QPS(即每秒的響應請求數(shù),也即是最大吞吐能力。),響應時間

    • 根據(jù)公式計算:服務器端最佳線程數(shù)量=((線程等待時間+線程cpu時間)/線程cpu時間) * cpu數(shù)量

    • 單用戶壓測,查看CPU的消耗,然后直接乘以百分比,再進行壓測,一般這個值的附近應該就是最佳線程數(shù)量。

  3. 對于io密集型模型

    • 網(wǎng)絡io密集型線程和進程沒有明顯的一個差別,因為影響性能的主要在網(wǎng)絡延遲
    • 磁盤的io密集型多線程性能要優(yōu)于多進程
  • 自己寫多線程模塊
  • python2,3中的多線程使用threadpool這個第三方模塊,模塊比較老了,用的人不多了
  • python3中自帶的模塊concurrent.futures
    主要說明第三種:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from concurrent.futures import ThreadPoolExecutor
import time 


def get_content(url, type=1):
    # print('begin')
    time.sleep(2)
    return 'url:{},type:{}'.format(url, type)


max_workers = 4
# 創(chuàng)建進程池
handler = ThreadPoolExecutor(max_workers=max_workers)

# f1 = handler.submit(get_content,'baidu.com',1)
# f2 = handler.submit(get_content,'movie.com',2)
urls = ['baidu.com','movie.com']
results = handler.map(get_content,urls)

for ret in results:
    if ret.running():
        print('ret:{},running'.format(ret))


進程池客戶使用submit或者map函數(shù)批量提交

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 一. 操作系統(tǒng)概念 操作系統(tǒng)位于底層硬件與應用軟件之間的一層.工作方式: 向下管理硬件,向上提供接口.操作系統(tǒng)進行...
    月亮是我踢彎得閱讀 6,176評論 3 28
  • 多線程類似于同時執(zhí)行多個不同程序,多線程運行有如下優(yōu)點: 使用線程可以把占據(jù)長時間的程序中的任務放到后臺去處理。 ...
    氨基鈉閱讀 169評論 1 1
  • 多線程類似于同時執(zhí)行多個不同程序,多線程運行有如下優(yōu)點: 使用線程可以把占據(jù)長時間的程序中的任務放到后臺去處理。 ...
    S大偉閱讀 825評論 0 1
  • https://www.w3cschool.cn/python3/python3-multithreading.h...
    奇里霍納桑閱讀 230評論 0 0
  • 分享一篇文章,原文在:Python3 多線程,作者是:Eappo Geng。 每個獨立的線程有一個程序運行的入口、...
    妄心xyx閱讀 968評論 0 2

友情鏈接更多精彩內(nèi)容