国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【神行百里】python開啟多線程(threading)與多進(jìn)程(multiprocessing)運(yùn)行

這篇具有很好參考價(jià)值的文章主要介紹了【神行百里】python開啟多線程(threading)與多進(jìn)程(multiprocessing)運(yùn)行。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

??由于處理數(shù)據(jù)過多,程序運(yùn)行很慢,就學(xué)習(xí)了一下python開啟多線程與多進(jìn)程的方法,雖然最后也沒用上,但還是記錄總結(jié)一下,以備不時(shí)之需。

??傳送門:進(jìn)程與線程認(rèn)識(shí),進(jìn)程與線程通俗理解
??簡言之,進(jìn)程為資源分配的最小單元,線程為程序執(zhí)行的最小單元


1. threading庫實(shí)現(xiàn)多線程運(yùn)行

??threading庫中的Thread類可以方便地開啟多線程運(yùn)行,Thread類需要傳入兩個(gè)參數(shù),target為需要執(zhí)行的函數(shù),args為函數(shù)的參數(shù),本例中自定義的multithreading函數(shù)具有三個(gè)參數(shù)。

import threading
import time
import os

def multithreading(data, clss, k):
    for i in range(5):
        time.sleep(3 * (k + 1))
        print(k, ":", clss, "--->", data,
              "---> 線程id:", threading.get_ident(),
              "---> 進(jìn)程id:", os.getpid())

data = ["一念月落,一念身錯(cuò),一念關(guān)山難涉過。棋逢過客,執(zhí)子者不問因果。",
        "奉上,唯愿去踏破善惡之疊浪,一心并肩赴跌宕",
        "刺予我傷口,重生了魂魄,立劍的時(shí)候,疾驟的嘶吼"]
clss = ["一念關(guān)山", "奉上", "立劍"]

threads = []
for k in range(3):
    t = threading.Thread(target=multithreading, args=(data[k], clss[k], k))  # 創(chuàng)建實(shí)例
    threads.append(t)  
    t.start()  # 啟動(dòng)線程運(yùn)行

for t in threads:
    t.join()   # 等待所有線程執(zhí)行完成

??輸出如下,三句話的線程id不同,但進(jìn)程id一樣。不同的線程搶占cpu資源,導(dǎo)致三句話打印混亂,由于延時(shí)差異,“立劍” 線程最后完成。

0 : 一念關(guān)山 ---> 一念月落,一念身錯(cuò),一念關(guān)山難涉過。棋逢過客,執(zhí)子者不問因果。 ---> 線程id: 8956 ---> 進(jìn)程id: 1268
0 : 一念關(guān)山 ---> 一念月落,一念身錯(cuò),一念關(guān)山難涉過。棋逢過客,執(zhí)子者不問因果。 ---> 線程id: 8956 ---> 進(jìn)程id: 1268
1 : 奉上 ---> 奉上,唯愿去踏破善惡之疊浪,一心并肩赴跌宕 ---> 線程id: 5640 ---> 進(jìn)程id: 1268
2 : 立劍 ---> 刺予我傷口,重生了魂魄,立劍的時(shí)候,疾驟的嘶吼 ---> 線程id: 26068 ---> 進(jìn)程id: 1268
0 : 一念關(guān)山 ---> 一念月落,一念身錯(cuò),一念關(guān)山難涉過。棋逢過客,執(zhí)子者不問因果。 ---> 線程id: 8956 ---> 進(jìn)程id: 1268
1 : 奉上 ---> 奉上,唯愿去踏破善惡之疊浪,一心并肩赴跌宕 ---> 線程id: 5640 ---> 進(jìn)程id: 1268
0 : 一念關(guān)山 ---> 一念月落,一念身錯(cuò),一念關(guān)山難涉過。棋逢過客,執(zhí)子者不問因果。 ---> 線程id: 8956 ---> 進(jìn)程id: 1268
0 : 一念關(guān)山 ---> 一念月落,一念身錯(cuò),一念關(guān)山難涉過。棋逢過客,執(zhí)子者不問因果。 ---> 線程id: 8956 ---> 進(jìn)程id: 1268
2 : 立劍 ---> 刺予我傷口,重生了魂魄,立劍的時(shí)候,疾驟的嘶吼 ---> 線程id: 26068 ---> 進(jìn)程id: 1268
1 : 奉上 ---> 奉上,唯愿去踏破善惡之疊浪,一心并肩赴跌宕 ---> 線程id: 5640 ---> 進(jìn)程id: 1268
1 : 奉上 ---> 奉上,唯愿去踏破善惡之疊浪,一心并肩赴跌宕 ---> 線程id: 5640 ---> 進(jìn)程id: 1268
2 : 立劍 ---> 刺予我傷口,重生了魂魄,立劍的時(shí)候,疾驟的嘶吼 ---> 線程id: 26068 ---> 進(jìn)程id: 1268
1 : 奉上 ---> 奉上,唯愿去踏破善惡之疊浪,一心并肩赴跌宕 ---> 線程id: 5640 ---> 進(jìn)程id: 1268
2 : 立劍 ---> 刺予我傷口,重生了魂魄,立劍的時(shí)候,疾驟的嘶吼 ---> 線程id: 26068 ---> 進(jìn)程id: 1268
2 : 立劍 ---> 刺予我傷口,重生了魂魄,立劍的時(shí)候,疾驟的嘶吼 ---> 線程id: 26068 ---> 進(jìn)程id: 1268

??


2. multiprocessing庫實(shí)現(xiàn)多進(jìn)程運(yùn)行

??multiprocessing庫使用方法與threading庫相同,其開啟類為Process。

??不過多進(jìn)程運(yùn)行似乎在windows下運(yùn)行有點(diǎn)問題,參考 這篇文章 也沒解決,似乎是windows下可以執(zhí)行但無法顯示,不過在linux下是可以顯示的。

import threading
import multiprocessing
import time
import os

def my_multiprocess(data, clss, k):
    for i in range(5):
        time.sleep(3 * (k + 1))
        print(k, ":", clss, "--->", data,
              "---> 線程id:", threading.get_ident(),
              "---> 進(jìn)程id:", os.getpid())

data = ["一念月落,一念身錯(cuò),一念關(guān)山難涉過。棋逢過客,執(zhí)子者不問因果。",
        "奉上,唯愿去踏破善惡之疊浪,一心并肩赴跌宕",
        "刺予我傷口,重生了魂魄,立劍的時(shí)候,疾驟的嘶吼"]
clss = ["一念關(guān)山", "奉上", "立劍"]

processes = []
for k in range(3):
    p = multiprocessing.Process(target=my_multiprocess, args=(data[k], clss[k], k))
    processes.append(p)
    p.start()

for p in processes:
    p.join()

??linux下運(yùn)行的輸出如下,三句話的進(jìn)程id不同,但線程id一樣了,這是可以的,線程id只要保證在進(jìn)程中的唯一性就可以啦~

0 : 一念關(guān)山 ---> 一念月落,一念身錯(cuò),一念關(guān)山難涉過。棋逢過客,執(zhí)子者不問因果。 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889018
0 : 一念關(guān)山 ---> 一念月落,一念身錯(cuò),一念關(guān)山難涉過。棋逢過客,執(zhí)子者不問因果。 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889018
1 : 奉上 ---> 奉上,唯愿去踏破善惡之疊浪,一心并肩赴跌宕 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889019
0 : 一念關(guān)山 ---> 一念月落,一念身錯(cuò),一念關(guān)山難涉過。棋逢過客,執(zhí)子者不問因果。 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889018
2 : 立劍 ---> 刺予我傷口,重生了魂魄,立劍的時(shí)候,疾驟的嘶吼 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889020
0 : 一念關(guān)山 ---> 一念月落,一念身錯(cuò),一念關(guān)山難涉過。棋逢過客,執(zhí)子者不問因果。 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889018
1 : 奉上 ---> 奉上,唯愿去踏破善惡之疊浪,一心并肩赴跌宕 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889019
0 : 一念關(guān)山 ---> 一念月落,一念身錯(cuò),一念關(guān)山難涉過。棋逢過客,執(zhí)子者不問因果。 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889018
2 : 立劍 ---> 刺予我傷口,重生了魂魄,立劍的時(shí)候,疾驟的嘶吼 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889020
1 : 奉上 ---> 奉上,唯愿去踏破善惡之疊浪,一心并肩赴跌宕 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889019
1 : 奉上 ---> 奉上,唯愿去踏破善惡之疊浪,一心并肩赴跌宕 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889019
2 : 立劍 ---> 刺予我傷口,重生了魂魄,立劍的時(shí)候,疾驟的嘶吼 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889020
1 : 奉上 ---> 奉上,唯愿去踏破善惡之疊浪,一心并肩赴跌宕 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889019
2 : 立劍 ---> 刺予我傷口,重生了魂魄,立劍的時(shí)候,疾驟的嘶吼 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889020
2 : 立劍 ---> 刺予我傷口,重生了魂魄,立劍的時(shí)候,疾驟的嘶吼 ---> 線程id: 140066568185664 ---> 進(jìn)程id: 1889020

??


??so:多線程與多進(jìn)程運(yùn)行可以提高Python程序運(yùn)行速度嗎

??Python的全局解釋器鎖(GIL)限制了同一時(shí)刻只有一個(gè)線程可以執(zhí)行Python字節(jié)碼,對(duì)于計(jì)算密集型任務(wù),多線程往往無法提高程序的執(zhí)行速度,但對(duì)于IO密集型任務(wù),多線程可以利用IO阻塞等待時(shí)的空閑時(shí)間執(zhí)行其他線程,提升運(yùn)行效率。
??多進(jìn)程則可以有效地避免GIL的限制,允許同時(shí)執(zhí)行多個(gè)進(jìn)程,從而提高程序的執(zhí)行速度。文章來源地址http://www.zghlxwxcb.cn/news/detail-783302.html

到了這里,關(guān)于【神行百里】python開啟多線程(threading)與多進(jìn)程(multiprocessing)運(yùn)行的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python多線程Thread——生產(chǎn)者消費(fèi)者模型 python隊(duì)列與多線程——生產(chǎn)者消費(fèi)者模型

    下面面向?qū)ο蟮慕嵌瓤淳€程 那么你可以試試看能不能用面向?qū)ο蟮姆椒▽?shí)現(xiàn)生產(chǎn)者消費(fèi)者模型吧。

    2024年02月09日
    瀏覽(35)
  • 一文掌握Python多線程與多進(jìn)程

    并發(fā)是今天計(jì)算機(jī)編程中的一項(xiàng)重要能力,尤其是在面對(duì)需要大量計(jì)算或I/O操作的任務(wù)時(shí)。Python 提供了多種并發(fā)的處理方式,本篇文章將深入探討其中的兩種:多線程與多進(jìn)程,解析其使用場景、優(yōu)點(diǎn)、缺點(diǎn),并結(jié)合代碼例子深入解讀。 Python中的線程是利用 threading 模塊實(shí)現(xiàn)

    2024年02月09日
    瀏覽(17)
  • Queue的多線程爬蟲和multiprocessing多進(jìn)程

    Queue的模塊里面提供了同步的、線程安全的隊(duì)列類,包括FIFO(先入后出)隊(duì)列Queue、FIFO(后入先出)LifoQueue和優(yōu)先隊(duì)列PriorityQueue。 (在上個(gè)文件創(chuàng)建了爬取文件) 我們使用這個(gè)方法來獲取,代碼如下: 對(duì)象傳入myThread中; thread = myThread(tName,workQueue) ?使用一個(gè)for循環(huán)來

    2024年04月14日
    瀏覽(24)
  • 【linux 多線程并發(fā)】多線程模型下的信號(hào)通信處理,與多進(jìn)程處理的比較,屬于相同進(jìn)程的線程信號(hào)分發(fā)機(jī)制

    ? 專欄內(nèi)容 : 參天引擎內(nèi)核架構(gòu) 本專欄一起來聊聊參天引擎內(nèi)核架構(gòu),以及如何實(shí)現(xiàn)多機(jī)的數(shù)據(jù)庫節(jié)點(diǎn)的多讀多寫,與傳統(tǒng)主備,MPP的區(qū)別,技術(shù)難點(diǎn)的分析,數(shù)據(jù)元數(shù)據(jù)同步,多主節(jié)點(diǎn)的情況下對(duì)故障容災(zāi)的支持。 手寫數(shù)據(jù)庫toadb 本專欄主要介紹如何從零開發(fā),開發(fā)的

    2024年01月17日
    瀏覽(22)
  • Python進(jìn)程池multiprocessing.Pool

    Python進(jìn)程池multiprocessing.Pool

    鯤鵬920:192核心 內(nèi)存:756G python:3.9 在做單純的cpu計(jì)算的場景,使用單進(jìn)程核多進(jìn)程的耗時(shí)做如下測試: 單進(jìn)程情況下cpu的占用了如下,占用一半的核心數(shù): 每一步和總耗時(shí)如下: cpu占用如下,每個(gè)進(jìn)程基本占用48個(gè)左右核心數(shù); 多進(jìn)程的耗時(shí)如下: 每一個(gè)進(jìn)程的耗時(shí)為

    2024年01月17日
    瀏覽(20)
  • Python自學(xué):使用多進(jìn)程處理 multiprocessing

    以下代碼沒有使用多進(jìn)程。 輸出為: Sleeping 1 second… Done Sleep… Sleeping 1 second… Done Sleep… Finished in 2.03 second(s) 以下代碼使用了多進(jìn)程。 輸出為: Sleeping 1 second… Sleeping 1 second… Done Sleep… Done Sleep… Finished in 1.07 second(s) 輸出為: Sleeping 1.5 second(s)… Sleeping 1.5 second(s)… Slee

    2024年02月09日
    瀏覽(24)
  • Python中使用multiprocessing模塊創(chuàng)建進(jìn)程

    Python中使用multiprocessing模塊創(chuàng)建進(jìn)程

    ????????在計(jì)算機(jī)編程領(lǐng)域,多進(jìn)程編程是一種常見的并發(fā)編程技術(shù),特別適用于利用多核處理器來提高程序性能和并行處理任務(wù)。Python作為一種功能強(qiáng)大的編程語言,提供了多種方法來實(shí)現(xiàn)多進(jìn)程編程。其中,multiprocessing模塊為我們提供了一種簡單而強(qiáng)大的方式來創(chuàng)建和

    2024年02月22日
    瀏覽(33)
  • 【Linux】 由“進(jìn)程”過渡到“線程” -- 什么是線程(thread)?

    【Linux】 由“進(jìn)程”過渡到“線程” -- 什么是線程(thread)?

    如何看待地址空間和頁表: 地址空間是進(jìn)程能看到的資源窗口 頁表決定,進(jìn)程真正擁有資源的情況(頁表映射多少才是擁有多少) 合理的對(duì)地址空間+頁表進(jìn)行資源劃分,我們就可以對(duì)一個(gè)進(jìn)程所有的資源進(jìn)行分類 虛擬地址如何找到物理地址: 最后一級(jí)頁表存放的是頁框的起

    2024年02月15日
    瀏覽(19)
  • Python分享之多進(jìn)程探索 (multiprocessing包)

    在初步了解Python多進(jìn)程之后,我們可以繼續(xù)探索multiprocessing包中更加高級(jí)的工具。這些工具可以讓我們更加便利地實(shí)現(xiàn)多進(jìn)程。 ? 進(jìn)程池 進(jìn)程池 (Process Pool)可以創(chuàng)建多個(gè)進(jìn)程。這些進(jìn)程就像是隨時(shí)待命的士兵,準(zhǔn)備執(zhí)行任務(wù)(程序)。一個(gè)進(jìn)程池中可以容納多個(gè)待命的士兵。

    2024年02月08日
    瀏覽(20)
  • 【Java基礎(chǔ)教程】(四十二)多線程篇 · 上:多進(jìn)程與多線程、并發(fā)與并行的關(guān)系,多線程的實(shí)現(xiàn)方式、線程流轉(zhuǎn)狀態(tài)、常用操作方法解析~

    【Java基礎(chǔ)教程】(四十二)多線程篇 · 上:多進(jìn)程與多線程、并發(fā)與并行的關(guān)系,多線程的實(shí)現(xiàn)方式、線程流轉(zhuǎn)狀態(tài)、常用操作方法解析~

    理解進(jìn)程與線程的區(qū)別; 掌握J(rèn)ava 中多線程的兩種實(shí)現(xiàn)方式及區(qū)別; 掌握線程的基本操作方法; 進(jìn)程是程序的一次動(dòng)態(tài)執(zhí)行過程,它經(jīng)歷了從代碼加載、執(zhí)行到執(zhí)行完畢的一個(gè)完整過程,這個(gè)過程也是進(jìn)程本身從產(chǎn)生、發(fā)展到最終消亡的過程 。多進(jìn)程操作系統(tǒng)能同時(shí)運(yùn)行多

    2024年02月16日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包