亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python之多進(jìn)程與多線程的使用

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

進(jìn)程與線程

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

多進(jìn)程

1、導(dǎo)包

from multiprocessing import Process

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

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

4、啟動(dòng)進(jìn)程
進(jìn)程名字.start()

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

6、進(jìn)程編號(hào)
導(dǎo)包os
獲取當(dāng)前進(jìn)程編號(hào)

os.getpid()

獲取當(dāng)前父進(jìn)程的編號(hào)

os.getppid()

代碼示例(未開啟進(jìn)程守護(hù))

from multiprocessing import Process
import time
import os

# 一個(gè)寫作業(yè)函數(shù)
def homeWork(name, count):
  for i in range(count):
    # 打印當(dāng)前進(jìn)程編號(hào)os.getpid()
    print("當(dāng)前進(jìn)程編號(hào):", os.getpid())

    # 打印當(dāng)前父進(jìn)程編號(hào)os.getppid()
    print("當(dāng)前父進(jìn)程編號(hào):", os.getppid())

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

    # 打印當(dāng)前父進(jìn)程編號(hào)os.getppid()
    print("當(dāng)前父進(jìn)程編號(hào):", os.getppid())

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

if __name__ == '__main__':
  # 打印當(dāng)前進(jìn)程編號(hào)os.getpid()
  print("當(dāng)前進(jìn)程編號(hào):", os.getpid())

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

  # 啟動(dòng)進(jìn)程
  p1.start()
  p2.start()
  time.sleep(1)
  print("主進(jìn)程結(jié)束---------------------------------------------")

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

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

Process finished with exit code 0

代碼示例(開啟進(jìn)程守護(hù))

from multiprocessing import Process
import time
import os

# 一個(gè)寫作業(yè)函數(shù)
def homeWork(name, count):
  for i in range(count):
    # 打印當(dāng)前進(jìn)程編號(hào)os.getpid()
    print("當(dāng)前進(jìn)程編號(hào):", os.getpid())

    # 打印當(dāng)前父進(jìn)程編號(hào)os.getppid()
    print("當(dāng)前父進(jìn)程編號(hào):", os.getppid())

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

    # 打印當(dāng)前父進(jìn)程編號(hào)os.getppid()
    print("當(dāng)前父進(jìn)程編號(hào):", os.getppid())

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

if __name__ == '__main__':
  # 打印當(dāng)前進(jìn)程編號(hào)os.getpid()
  print("當(dāng)前進(jìn)程編號(hào):", os.getpid())

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

開啟進(jìn)程守護(hù)的運(yùn)行結(jié)果

當(dāng)前進(jìn)程編號(hào): 372
當(dāng)前進(jìn)程編號(hào): 10116
當(dāng)前進(jìn)程編號(hào): 9860
當(dāng)前父進(jìn)程編號(hào): 372
進(jìn)程1 正在寫作業(yè)...
當(dāng)前父進(jìn)程編號(hào): 372
進(jìn)程2 正在打游戲...
當(dāng)前進(jìn)程編號(hào): 9860
當(dāng)前進(jìn)程編號(hào): 10116
當(dāng)前父進(jìn)程編號(hào): 372
進(jìn)程2 正在打游戲...
當(dāng)前父進(jìn)程編號(hào): 372
進(jìn)程1 正在寫作業(yè)...
當(dāng)前進(jìn)程編號(hào): 9860
當(dāng)前進(jìn)程編號(hào): 10116
當(dāng)前父進(jìn)程編號(hào): 372
進(jìn)程1 正在寫作業(yè)...
當(dāng)前父進(jìn)程編號(hào): 372
進(jìn)程2 正在打游戲...
當(dāng)前進(jìn)程編號(hào): 9860
當(dāng)前進(jìn)程編號(hào): 10116
當(dāng)前父進(jìn)程編號(hào): 372
進(jìn)程1 正在寫作業(yè)...
當(dāng)前父進(jìn)程編號(hào): 372
進(jìn)程2 正在打游戲...
主進(jìn)程結(jié)束---------------------------------------------

Process finished with exit code 0

多線程

1、導(dǎo)包

import threading

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

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

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

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

6、線程編號(hào)
獲取當(dāng)前線程編號(hào)

threading.current_thread()

代碼示例(未開啟進(jìn)程守護(hù))

import threading
import time

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

if __name__ == '__main__':

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

  # 啟動(dòng)進(jìn)程
  t1.start()
  t2.start()
  time.sleep(1)
  print("主進(jìn)程結(jié)束###################################################################################")

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

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

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

Process finished with exit code 0

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

import threading
import time

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

if __name__ == '__main__':

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

  # 啟動(dòng)進(jìn)程
  t1.start()
  t2.start()
  time.sleep(1)
  print("主進(jìn)程結(jié)束###################################################################################")

開啟線程守護(hù)的運(yùn)行結(jié)果

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

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

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

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

Process finished with exit code 0

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

相關(guān)文章

  • python中opencv與PIL圖片讀取保存及相互轉(zhuǎn)化方式

    python中opencv與PIL圖片讀取保存及相互轉(zhuǎn)化方式

    這篇文章主要介紹了python中opencv與PIL圖片讀取保存及相互轉(zhuǎn)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • opencv函數(shù)threshold、adaptiveThreshold、Otsu二值化的實(shí)現(xiàn)

    opencv函數(shù)threshold、adaptiveThreshold、Otsu二值化的實(shí)現(xiàn)

    這篇文章主要介紹了opencv函數(shù)threshold、adaptiveThreshold、Otsu二值化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python將txt等文件中的數(shù)據(jù)讀為numpy數(shù)組的方法

    python將txt等文件中的數(shù)據(jù)讀為numpy數(shù)組的方法

    今天小編就為大家分享一篇python將txt等文件中的數(shù)據(jù)讀為numpy數(shù)組的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • colab中修改python版本的全過程

    colab中修改python版本的全過程

    日 對(duì)于沒有服務(wù)器的研究生來說,Colab無疑是性價(jià)比最高的GPU選擇,下面這篇文章主要給大家介紹了關(guān)于如何利用colab修改python版本的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • python一秒搭建FTP服務(wù)器

    python一秒搭建FTP服務(wù)器

    今天給大家分享一篇教程關(guān)于python一秒搭建FTP服務(wù)器的教程,在搭建過程中需要用到pyftpdlib模塊,對(duì)python FTP服務(wù)器搭建過程感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • Python實(shí)現(xiàn)二叉樹的常見遍歷操作總結(jié)【7種方法】

    Python實(shí)現(xiàn)二叉樹的常見遍歷操作總結(jié)【7種方法】

    這篇文章主要介紹了Python實(shí)現(xiàn)二叉樹的常見遍歷操作,結(jié)合實(shí)例形式總結(jié)分析了二叉樹的前序、中序、后序、層次遍歷中的迭代與遞歸等7種操作方法,需要的朋友可以參考下
    2019-03-03
  • Series和DataFrame使用簡(jiǎn)單入門

    Series和DataFrame使用簡(jiǎn)單入門

    這篇文章主要介紹了Series和DataFrame使用簡(jiǎn)單入門,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Python爬蟲_城市公交、地鐵站點(diǎn)和線路數(shù)據(jù)采集實(shí)例

    Python爬蟲_城市公交、地鐵站點(diǎn)和線路數(shù)據(jù)采集實(shí)例

    下面小編就為大家分享一篇Python爬蟲_城市公交、地鐵站點(diǎn)和線路數(shù)據(jù)采集實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • python簡(jiǎn)單實(shí)現(xiàn)操作Mysql數(shù)據(jù)庫

    python簡(jiǎn)單實(shí)現(xiàn)操作Mysql數(shù)據(jù)庫

    本文給大家分享的是在python中使用webpy實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)庫增刪改查操作的方法,非常的簡(jiǎn)單,有需要的小伙伴可以參考下
    2018-01-01
  • pytest配置文件pytest.ini的詳細(xì)使用

    pytest配置文件pytest.ini的詳細(xì)使用

    這篇文章主要介紹了pytest配置文件pytest.ini的詳細(xì)使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論