python并發(fā),了解一下签则?

如果有一大批數(shù)據(jù)镣奋,需要根據(jù)一定的邏輯完成數(shù)據(jù)處理,你可能會有如下幾種情況:

  • 不引入并發(fā)怀愧,編寫的腳本執(zhí)行效率很低
  • 想要引入并發(fā)侨颈,但是不會用
  • 學(xué)過多進程、多線程和多協(xié)程芯义,但是不知道當(dāng)下這種情況該選哪種

下面我們就來做一下探討哈垢!

一、選型問題

  • 進程
    1扛拨、首先耘分,如果線程、協(xié)程都解決不了你的問題绑警,則考慮一下使用進程(進程開銷大求泰,所以優(yōu)先考慮線程、協(xié)程)
    2计盒、其次渴频,需要確認你程序要運行的機器的cpu的核數(shù),linux可以使用命令cat /proc/cpuinfo |grep "processor"|sort -u|wc -l查看北启。如果你的cpu核數(shù)較為理想(需要同時考慮其他程序的進程的占用而確定卜朗,比如運行在這臺機器上的一些軟件什么的),且你可以搞定進程間通信咕村,可以選擇進程场钉。
    3、當(dāng)然懈涛,如果你的cpu只有一個核逛万,這意味著同一時間只能有一個進程在占用cpu,則選擇多進程完全不會有任何提效批钠。
  • 線程
    1宇植、如果想要使用線程得封,就不得不對python解釋器CPython的底層GIL有一定的了解
    2、其次当纱,分析一下你的業(yè)務(wù)場景中IO操作(如文件讀寫呛每、網(wǎng)絡(luò)傳輸)的占比踩窖。如果IO操作不多(即CPU密集型)的話坡氯,python的多線程不是一個好的選擇,因為這意味著各線程都要占用cpu洋腮,但是GIL決定了同一時間只能有一個線程占用cpu箫柳,所以針對IO操作較多(即IO密集型)的程序,多線程或許是你的一個比較好的選擇啥供,因為多線程相對編碼容易悯恍,且IO多就促成了cpu可以空出時間去做其他的事情,效率自然也就提高了伙狐。
    3涮毫、當(dāng)然,使用多線程時并非線程數(shù)越多越快贷屎,因為系統(tǒng)切換線程也存在較大的開銷罢防,開發(fā)者應(yīng)盡可能找到最佳的臨界點,以最大化執(zhí)行效率唉侄。
  • 協(xié)程
    1咒吐、對比多進程,協(xié)程開銷小且不需要考慮同步問題
    2属划、針對IO密集型程序恬叹,并發(fā)數(shù)量較多的情況下,可能比多線程效率要高同眯,對比線程數(shù)越多的多線程程序協(xié)程的優(yōu)勢就越明顯(由于GIL的限制绽昼,多線程主要是敗在了線程切換的開銷,線程數(shù)越多须蜗,開銷越大)绪励;針對CPU密集型程序,無優(yōu)勢唠粥。
    3疏魏、協(xié)程是異步的,當(dāng)遇到IO操作晤愧,會中斷轉(zhuǎn)而去處理其他任務(wù)大莫,等IO結(jié)束返回來繼續(xù)處理。
  • 多進程+協(xié)程
    如果cpu夠用官份,可考慮多進程+協(xié)程結(jié)合使用只厘。既充分利用了多核烙丛,又發(fā)揮了協(xié)程的高效率,可獲得極高的性能羔味。

總的來說河咽,CPU密集型選多進程,IO密集型看線程并發(fā)量斟酌選多線程或協(xié)程赋元,想發(fā)揮出多核cpu最大優(yōu)勢忘蟹,選多進程+協(xié)程。

二搁凸、demo

1媚值、多進程

待補充

2、多線程

import threading
from math import ceil


def test(data, threadNums):
    num = len(data)
    n = int(threading.currentThread().getName())
    # 避免不能整除
    count = ceil(num / threadNums)
    for i in range(n * count, (n + 1) * count):
        # 不能越界
        if i < num:
            print(data[i])  # 這里替換為業(yè)務(wù)邏輯


# data為數(shù)據(jù)列表(或字典等其他類型护糖,根據(jù)實際業(yè)務(wù)情況而定)褥芒,threadNum為線程數(shù)
def testThread(data, threadNum):
    threadList = []
    for i in range(threadNum):
        thread = threading.Thread(target=test, args=(data, threadNum), name="{}".format(i))
        thread.start()
        threadList.append(thread)
    for j in threadList:
        j.join()


if __name__ == '__main__':
    testThread([i for i in range(10)], 3)

3、多協(xié)程

待補充

4嫡良、多進程+協(xié)程

待補充

END~

參考:
廖雪峰的官方網(wǎng)站
python中的GIL詳解
淺析Python的進程锰扶、線程與協(xié)程
【python】python進程、線程寝受、協(xié)程和什么時候使用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坷牛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子羡蛾,更是在濱河造成了極大的恐慌漓帅,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痴怨,死亡現(xiàn)場離奇詭異忙干,居然都是意外死亡,警方通過查閱死者的電腦和手機浪藻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門捐迫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人爱葵,你說我怎么就攤上這事施戴。” “怎么了萌丈?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵赞哗,是天一觀的道長。 經(jīng)常有香客問我辆雾,道長肪笋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮藤乙,結(jié)果婚禮上猜揪,老公的妹妹穿的比我還像新娘。我一直安慰自己坛梁,他們只是感情好而姐,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著划咐,像睡著了一般拴念。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尖殃,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天丈莺,我揣著相機與錄音划煮,去河邊找鬼送丰。 笑死,一個胖子當(dāng)著我的面吹牛弛秋,可吹牛的內(nèi)容都是我干的器躏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蟹略,長吁一口氣:“原來是場噩夢啊……” “哼登失!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挖炬,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤揽浙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后意敛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馅巷,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年草姻,在試婚紗的時候發(fā)現(xiàn)自己被綠了钓猬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡撩独,死狀恐怖敞曹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情综膀,我是刑警寧澤澳迫,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站剧劝,受9級特大地震影響橄登,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一示绊、第九天 我趴在偏房一處隱蔽的房頂上張望锭部。 院中可真熱鬧,春花似錦面褐、人聲如沸拌禾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽湃窍。三九已至,卻和暖如春匪傍,著一層夾襖步出監(jiān)牢的瞬間您市,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工役衡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茵休,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓手蝎,卻偏偏與公主長得像榕莺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子棵介,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容