最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python之多進程與多線程的使用

 更新時間:2021年02月23日 08:35:19   作者:我不是禿頭哆唻咪  
這篇文章主要介紹了Python之多進程與多線程的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

進程與線程

想象在學校的一個機房,有固定數(shù)量的電腦,老師安排了一個爬蟲任務讓大家一起完成,每個學生使用一臺電腦爬取部分數(shù)據(jù),將數(shù)據(jù)放到一個公共數(shù)據(jù)庫。共同資源就像公共數(shù)據(jù)庫,進程就像每一個學生,每多一個學生,就多一個進程來完成這個任務,機房里的電腦數(shù)量就像CPU,所以進程數(shù)量是CPU決定的,線程就像學生用一臺電腦開多個爬蟲,爬蟲數(shù)量由每臺電腦的運行內(nèi)存決定。
一個CPU可以有多個進程,一個進程有一個或多個線程。

多進程

1、導包

from multiprocessing import Process

2、寫兩個任務
也就是兩個函數(shù)

3、創(chuàng)建一個進程
進程名字 = Process(target=函數(shù)名字,函數(shù)參數(shù)傳字典或元組,是否守護進程)

4、啟動進程
進程名字.start()

5、是否開啟進程守護,一般主進程會等待子進程執(zhí)行完畢后再關閉程序。當我們想程序主進程跑完,直接銷毀掉未完成的子進程,關閉程序的話,加上一句代碼 :
1.創(chuàng)建進程的時候傳參數(shù)daemon=True
2.進程名字.daemon=True

6、進程編號
導包os
獲取當前進程編號

os.getpid()

獲取當前父進程的編號

os.getppid()

代碼示例(未開啟進程守護)

from multiprocessing import Process
import time
import os

# 一個寫作業(yè)函數(shù)
def homeWork(name, count):
  for i in range(count):
    # 打印當前進程編號os.getpid()
    print("當前進程編號:", os.getpid())

    # 打印當前父進程編號os.getppid()
    print("當前父進程編號:", os.getppid())

    print(name, "正在寫作業(yè)...")
    time.sleep(0.2)
# 一個打游戲函數(shù)
def game(name, count):
  for i in range(count):
    # 打印當前進程編號os.getpid()
    print("當前進程編號:", os.getpid())

    # 打印當前父進程編號os.getppid()
    print("當前父進程編號:", os.getppid())

    print(name, "正在打游戲...")
    time.sleep(0.2)

if __name__ == '__main__':
  # 打印當前進程編號os.getpid()
  print("當前進程編號:", os.getpid())

  # 進程1寫作業(yè) 元組傳參
  p1 = Process(target=homeWork, args=("進程1", 10))
  # 進程2打游戲 字典傳參
  p2 = Process(target=game, kwargs={"name": "進程2", "count": 10})

  # 啟動進程
  p1.start()
  p2.start()
  time.sleep(1)
  print("主進程結(jié)束---------------------------------------------")

未開啟線程守護的運行結(jié)果:

 # 可以看到主進程結(jié)束的,其子進程還在繼續(xù)
當前進程編號: 14972
當前進程編號: 5732
當前父進程編號: 14972
進程1 正在寫作業(yè)...
當前進程編號: 14752
當前父進程編號: 14972
進程2 正在打游戲...
當前進程編號: 5732
當前父進程編號: 14972
進程1 正在寫作業(yè)...
當前進程編號: 14752
當前父進程編號: 14972
進程2 正在打游戲...
當前進程編號: 5732
當前父進程編號: 14972
進程1 正在寫作業(yè)...
當前進程編號: 14752
當前父進程編號: 14972
進程2 正在打游戲...
當前進程編號: 5732
當前父進程編號: 14972
進程1 正在寫作業(yè)...
當前進程編號: 14752
當前父進程編號: 14972
進程2 正在打游戲...
主進程結(jié)束---------------------------------------------
當前進程編號: 5732
當前父進程編號: 14972
進程1 正在寫作業(yè)...
當前進程編號: 14752
當前父進程編號: 14972
進程2 正在打游戲...
當前進程編號: 5732
當前父進程編號: 14972
進程1 正在寫作業(yè)...
當前進程編號: 14752
當前父進程編號: 14972
進程2 正在打游戲...
當前進程編號: 5732
當前父進程編號: 14972
進程1 正在寫作業(yè)...
當前進程編號: 14752
當前父進程編號: 14972
進程2 正在打游戲...
當前進程編號: 5732
當前父進程編號: 14972
進程1 正在寫作業(yè)...
當前進程編號: 14752
當前父進程編號: 14972
進程2 正在打游戲...
當前進程編號: 5732
當前父進程編號: 14972
進程1 正在寫作業(yè)...
當前進程編號: 14752
當前父進程編號: 14972
進程2 正在打游戲...
當前進程編號: 5732
當前父進程編號: 14972
進程1 正在寫作業(yè)...
當前進程編號: 14752
當前父進程編號: 14972
進程2 正在打游戲...

Process finished with exit code 0

代碼示例(開啟進程守護)

from multiprocessing import Process
import time
import os

# 一個寫作業(yè)函數(shù)
def homeWork(name, count):
  for i in range(count):
    # 打印當前進程編號os.getpid()
    print("當前進程編號:", os.getpid())

    # 打印當前父進程編號os.getppid()
    print("當前父進程編號:", os.getppid())

    print(name, "正在寫作業(yè)...")
    time.sleep(0.2)
# 一個打游戲函數(shù)
def game(name, count):
  for i in range(count):
    # 打印當前進程編號os.getpid()
    print("當前進程編號:", os.getpid())

    # 打印當前父進程編號os.getppid()
    print("當前父進程編號:", os.getppid())

    print(name, "正在打游戲...")
    time.sleep(0.2)

if __name__ == '__main__':
  # 打印當前進程編號os.getpid()
  print("當前進程編號:", os.getpid())

  # 進程1寫作業(yè) 元組傳參 第一種方法啟動進程守護
  p1 = Process(target=homeWork, args=("進程1", 10), daemon=True)
  # 進程2打游戲 字典傳參
  p2 = Process(target=game, kwargs={"name": "進程2", "count": 10})
  # 第二種
  p2.daemon = True
  # 啟動進程
  p1.start()
  p2.start()
  time.sleep(1)
  print("主進程---------------------------------------------")

開啟進程守護的運行結(jié)果

當前進程編號: 372
當前進程編號: 10116
當前進程編號: 9860
當前父進程編號: 372
進程1 正在寫作業(yè)...
當前父進程編號: 372
進程2 正在打游戲...
當前進程編號: 9860
當前進程編號: 10116
當前父進程編號: 372
進程2 正在打游戲...
當前父進程編號: 372
進程1 正在寫作業(yè)...
當前進程編號: 9860
當前進程編號: 10116
當前父進程編號: 372
進程1 正在寫作業(yè)...
當前父進程編號: 372
進程2 正在打游戲...
當前進程編號: 9860
當前進程編號: 10116
當前父進程編號: 372
進程1 正在寫作業(yè)...
當前父進程編號: 372
進程2 正在打游戲...
主進程結(jié)束---------------------------------------------

Process finished with exit code 0

多線程

1、導包

import threading

2、寫兩個任務
也就是兩個函數(shù)

3、創(chuàng)建一個線程
線程名字 = threading.Thread(target=函數(shù)名字,函數(shù)參數(shù)傳字典或元組,是否守護進程)

4、啟動線程
線程名字.start()

5、是否開啟線程守護,一般當前程序會等待子線程執(zhí)行完畢后再關閉程序。當我們想程序跑完,銷毀掉未完成的子線程,直接關閉程序的話,加上一句代碼 :
1.創(chuàng)建線程的時候傳參數(shù)daemon=True
2.線程名字.daemon=True

6、線程編號
獲取當前線程編號

threading.current_thread()

代碼示例(未開啟進程守護)

import threading
import time

# 一個寫作業(yè)函數(shù)
def homeWork(name, count):
  for i in range(count):
    # 打印當前線程
    print(threading.current_thread())
    print(name, "正在寫作業(yè)...")
    time.sleep(0.2)
# 一個打游戲函數(shù)
def game(name, count):
  for i in range(count):
    # 打印當前線程
    print(threading.current_thread())
    print(name, "正在打游戲...")
    time.sleep(0.2)

if __name__ == '__main__':

  # 線程1寫作業(yè) 元組傳參
  t1 = threading.Thread(target=homeWork, args=("進程1", 10))
  # 線程2打游戲 字典傳參
  t2 = threading.Thread(target=game, kwargs={"name": "進程2", "count": 10})

  # 啟動進程
  t1.start()
  t2.start()
  time.sleep(1)
  print("主進程結(jié)束###################################################################################")

未開啟線程守護的運行結(jié)果

 # 可以看到主進程結(jié)束的,其線程還在繼續(xù)
<Thread(Thread-1, started 3364)>
進程1 正在寫作業(yè)...
<Thread(Thread-2, started 9100)>
進程2 正在打游戲...
<Thread(Thread-2, started 9100)>
進程2 正在打游戲...
<Thread(Thread-1, started 3364)>
進程1 正在寫作業(yè)...
<Thread(Thread-1, started 3364)>
進程1 正在寫作業(yè)...
<Thread(Thread-2, started 9100)>
進程2 正在打游戲...
<Thread(Thread-2, started 9100)>
進程2 正在打游戲...
<Thread(Thread-1, started 3364)>
進程1 正在寫作業(yè)...
<Thread(Thread-1, started 3364)>
進程1 正在寫作業(yè)...
<Thread(Thread-2, started 9100)>
進程2 正在打游戲...
主進程結(jié)束###################################################################################
<Thread(Thread-2, started 9100)>
進程2 正在打游戲...
<Thread(Thread-1, started 3364)>
進程1 正在寫作業(yè)...
<Thread(Thread-1, started 3364)>
<Thread(Thread-2, started 9100)>
進程2 正在打游戲...進程1
正在寫作業(yè)...
<Thread(Thread-1, started 3364)>
進程1 正在寫作業(yè)...
<Thread(Thread-2, started 9100)>
進程2 正在打游戲...
<Thread(Thread-2, started 9100)><Thread(Thread-1, started 3364)>
進程1
進程2正在寫作業(yè)...
 正在打游戲...
<Thread(Thread-2, started 9100)><Thread(Thread-1, started 3364)>

進程2 進程1 正在打游戲...
正在寫作業(yè)...

Process finished with exit code 0

代碼示例(開啟線程守護)

import threading
import time

# 一個寫作業(yè)函數(shù)
def homeWork(name, count):
  for i in range(count):
    # 打印當前線程
    print(threading.current_thread())
    print(name, "正在寫作業(yè)...")
    time.sleep(0.2)
# 一個打游戲函數(shù)
def game(name, count):
  for i in range(count):
    # 打印當前線程
    print(threading.current_thread())
    print(name, "正在打游戲...")
    time.sleep(0.2)

if __name__ == '__main__':

  # 線程1寫作業(yè) 元組傳參
  t1 = threading.Thread(target=homeWork, args=("進程1", 10), daemon=True)
  # 線程2打游戲 字典傳參
  t2 = threading.Thread(target=game, kwargs={"name": "進程2", "count": 10})
  t2.daemon = True

  # 啟動進程
  t1.start()
  t2.start()
  time.sleep(1)
  print("主進程結(jié)束###################################################################################")

開啟線程守護的運行結(jié)果

<Thread(Thread-1, started daemon 15480)>
進程1 正在寫作業(yè)...
<Thread(Thread-2, started daemon 13700)>
進程2 正在打游戲...
<Thread(Thread-2, started daemon 13700)>
進程2 正在打游戲...
<Thread(Thread-1, started daemon 15480)>
進程1 正在寫作業(yè)...
<Thread(Thread-1, started daemon 15480)><Thread(Thread-2, started daemon 13700)>
進程1
進程2 正在寫作業(yè)...正在打游戲...

<Thread(Thread-2, started daemon 13700)><Thread(Thread-1, started daemon 15480)>

進程1進程2 正在寫作業(yè)... 正在打游戲...

<Thread(Thread-1, started daemon 15480)>
進程1 正在寫作業(yè)...
<Thread(Thread-2, started daemon 13700)>
進程2 正在打游戲...
主進程結(jié)束###################################################################################

Process finished with exit code 0

到此這篇關于Python之多進程與多線程的使用的文章就介紹到這了,更多相關Python 多進程與多線程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Pytorch 實現(xiàn)權(quán)重初始化

    Pytorch 實現(xiàn)權(quán)重初始化

    今天小編就為大家分享一篇Pytorch 實現(xiàn)權(quán)重初始化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python繪制橫豎條形圖的方法

    python繪制橫豎條形圖的方法

    這篇文章主要為大家詳細介紹了python繪制橫豎條形圖的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Python+OpenCV實現(xiàn)閾值分割的方法詳解

    Python+OpenCV實現(xiàn)閾值分割的方法詳解

    閾值分割法是一種基于區(qū)域的圖像分割技術,原理是把圖像像素點分為若干類。本文將利用Python+OpenCV實現(xiàn)閾值分割,感興趣的可以了解一下
    2022-05-05
  • 對Tensorflow中的變量初始化函數(shù)詳解

    對Tensorflow中的變量初始化函數(shù)詳解

    今天小編就為大家分享一篇對Tensorflow中的變量初始化函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • python pydoc生成API文檔的實現(xiàn)

    python pydoc生成API文檔的實現(xiàn)

    pydoc?模塊會根據(jù) Python 模塊來自動生成文檔,本文主要介紹了python pydoc生成API文檔的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Python?Pandas教程之series 上的轉(zhuǎn)換操作

    Python?Pandas教程之series 上的轉(zhuǎn)換操作

    這篇文章主要介紹了Python?Pandas教程之series上的轉(zhuǎn)換操作,文章通過圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Python編寫通訊錄通過數(shù)據(jù)庫存儲實現(xiàn)模糊查詢功能

    Python編寫通訊錄通過數(shù)據(jù)庫存儲實現(xiàn)模糊查詢功能

    數(shù)據(jù)庫存儲通訊錄,要求按姓名/電話號碼查詢,查詢條件只有一個輸入入口,自動識別輸入的是姓名還是號碼,允許模糊查詢。這篇文章主要介紹了Python編寫通訊錄,支持模糊查詢,利用數(shù)據(jù)庫存儲,需要的朋友可以參考下
    2019-07-07
  • Django視圖、傳參和forms驗證操作

    Django視圖、傳參和forms驗證操作

    這篇文章主要介紹了Django視圖、傳參和forms驗證操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python學生管理系統(tǒng)學習筆記

    python學生管理系統(tǒng)學習筆記

    這篇文章主要為大家詳細介紹了python學生管理系統(tǒng)的學習筆記,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • python人工智能tensorflow函數(shù)tf.layers.dense使用方法

    python人工智能tensorflow函數(shù)tf.layers.dense使用方法

    這篇文章主要介紹了python人工智能tensorflow函數(shù)tf.layers.dense的使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05

最新評論

北辰区| 海林市| 堆龙德庆县| 泰州市| 芒康县| 寻乌县| 高唐县| 景东| 吴堡县| 沿河| 铅山县| 盐池县| 南部县| 安泽县| 淅川县| 广元市| 鄂伦春自治旗| 大冶市| 文山县| 武义县| 象山县| 南平市| 本溪| 金山区| 济南市| 临沭县| 公主岭市| 饶河县| 广河县| 铜川市| 西吉县| 大姚县| 泾川县| 宜宾市| 赣州市| 昌黎县| 合山市| 汾阳市| 宜宾县| 屏边| 铁岭市|