婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python基礎之進程詳解

Python基礎之進程詳解

熱門標簽:武漢外呼系統平臺 如何申請400電話費用 沈陽防封電銷卡品牌 江西省地圖標注 沈陽人工外呼系統價格 池州外呼調研線路 富錦商家地圖標注 外呼系統哪些好辦 沈陽外呼系統呼叫系統

一、前言

進程,一個新鮮的字眼,可能有些人并不了解,它是系統某個運行程序的載體,這個程序可以有單個或者多個進程,一般來說,進程是通過系統CPU 內核數來分配并設置的,我們可以來看下系統中的進程:

可以看到,360瀏覽器是真的皮,這么多進程啊,當然可以這樣來十分清楚的看進程線程使用情況:

通過任務管理器中的資源監視器,是不是很厲害了,哈哈哈。講完了這些,再說說用法。

二、基本用法

進程能干什么,這是我們要深思熟慮的事情。我們都知道一個程序運行會創建進程,所以程序在創建這些進程的時候,為了讓它們更能有條不紊的工作,肯定也加入了線程。

那么一條進程里面就會有多個線程協同作戰,但是進程不可以創建過多,不然會消耗資源,除非你開發的是一個大型的系統。那么,我們現在就來創建一個進程吧。

一、創建進程 1.在創建進程之前,我們先導入進程的模塊,代碼如下:

import multiprocess as m
m.Process(target,args)

其實這種寫法是不對的,就好比bs4中的BeautifulSoup,你想通過先導入bs4,然后再引入BeautifulSoup是行不通的,必須這樣:

from multiprocessing import Process
Process(group, target, args, kwargs, name)
group:用戶組
target:調用函數
args:參數元祖
kwargs:參數字典
name:子進程名稱

可以看出進程和線程的用法基本差不多,只是名稱功能不同而已。而且還有很多其它優秀的方法:

# 返回當前進程存活的子進程的列表。調用該方法有“等待”已經結束的進程的副作用。
multiprocessing.active_children()
 
 
# 返回系統的CPU數量。
multiprocessing.cpu_count()

三、創建單個進程

由上述參數可知函數的返回值,基本與線程無差異化。

#啟動進程,調用進程中的run()方法。
start()
 
 
#進程活動的方法
run()
 
 
#強制終止進程,不會進行任何清理操作。如果終止前創建了子進程,那么該子進程在其強制結束后變為僵尸進程;如果該進程還保存了一個鎖,那么也將不會被釋放,進而導致死鎖。
terminate()
 
 
#判斷某進程是否存活,存活返回True,否則False。
is_alive()
 
 
主線程等待子線程終止。timeout為可選擇超時時間;需要強調的是:p.join只能join住start開啟的進程,而不能join住run開啟的進程。
join([timeout])
 
 
#設置進程為后臺守護進程;當該進程的父進程終止時,該進程也隨之終止,并且該進程不能創建子進程,設置該屬性必須在start()之前
daemon
 
 
#進程名稱。
name
 
 
#進程pid,在start后才能產生
pid
 
 
#子進程的退出代碼。如果進程尚未終止,這將是 None,負值-N表示子進程被信號N終止。
exitcode
 
 
#進程身份驗證,默認是os.urandom()隨機生成的字符串。校驗網進程連接是否正確
authkey
 
 
#系統對象的數字句柄,當進程結束時將變為 "ready" 。
sentinel
 
 
#殺進程
kill()
 
 
#關閉進程
close()

請注意:創建進程務必將它加入如下語句中:

if __name__ == '__main__':

這樣就實現了我們的一個關于進程的程序了。另外我們也可以通過繼承進程類來實現:

可以說我們每創建一個進程它就會有一個ID來標志它,下面情況:

四、創建多個進程

單個進程往往都是不夠用的,所有我們需要創建一個多進程,多進程創建方法也很簡單,加一層循環即可:

這樣就輕松創建了多進程的任務,速度比以往就要更快了。

五、進程池

進程池的設計之初就是為了方便我們更有效的利用資源,避免浪費,如果任務量大就多個核一起幫忙,如果少就只開一兩個核,下面我們來看看實現過程:

首先導入包:

from multiprocessing import Pool
import multiprocessing as m

進程池的安裝包為Pool,然后我們來看下它的CPU內核數:

num=m.cpu_count()#CPU內核數

緊接著我們在來創建進程池:

pool=multiprocessing.Pool(num)

進程池中也有很多方法供我們使用:

apply(func,args,kwargs)                 同步執行(串行) 阻塞
 
 
apply_async(func,args,kwargs)           異步執行(并行) 非阻塞
 
 
terminate()            強制終止進程,不在處理未完成的任務。
 
 
join()     主進程阻塞,等待子進程的退出。必須在close或terminate()之后使用
 
 
close()            等待所有進程結束后,才關閉進程池
 
 
map(func,iterable,chunksize=int) map函數的并行版本,保持阻塞直到獲得結果
 
 
#返回一個可用于獲取結果的對象,回調函數應該立即執行完成,否則會阻塞負責處理結果的線程
map_async(func,iterable,chunksize,callback,error_callback)
 
 
imap(func,iterable,chunksize) map的延遲執行版本
 
 
#和imap() 相同,只不過通過迭代器返回的結果是任意的
imap_unordered(func,iterable,chunksize)
 
 
#和 map() 類似,不過 iterable 中的每一項會被解包再作為函數參數。
starmap(func,iterable,chunksize)

為此我們可以創建同步和異步的程序,如果你對這對于爬蟲來說是很不錯的選擇,小點的爬蟲同步就好,大的爬蟲異步效果更佳,很多人不了解異步和同步,其實同步異步就是串行和并行的意思串行和并行簡單點說就是串聯和并聯。下面我們通過實例一起來看一下:

串行

并行

可以看到,僅僅只是一個參數的變化而已,其它的都是大同小異,我們獲取到了當前進程的pid,然后把它打印出來了。

六、鎖

雖然異步編程多進程給我們帶來了便利,但是進程啟動后是不可控的,我們需要將它控制住,讓它干我們覺得有意義的事,這個時候我們需要給它加鎖,和線程一樣都是lock:

首先導入進程鎖的模塊:

from multiprocessing import Lock

然后我們來創建一個關于鎖的程序:

可以看到,加鎖的過程還是比較順利的,跟多線程一樣簡單,但是相對來說速度會慢一點。既然有Lock,那么勢必就有RLock了,在python 中,進程和線程的很多用法一致,鎖就是。我們可以把它改為RLock,下面便是可重入鎖,也就是可以遞歸:

import time
lock1=RLock()
lock2=RLock()
s=time.time()
def jc(num):
    lock1.acquire()
    lock2.acquire()
    print('start')
    print(m.current_process().pid,'run----',str(num))
    lock1.release()
    lock2.release()
    print('end')
if __name__ == '__main__':
    aa=[]
    for y in range(12):
        pp=Process(target=jc,args=(y,))
        pp.start()
        aa.append(pp)
    for x in aa:
        x.join()
    e=time.time()
    print(e-s)

七、進程間通信

Event

進程間用于通信,方法和線程的一模一樣,這里舉個小栗子,不在詳細描述,不懂的可以看我上一篇關于線程的文章,我們今天要講的是其它的進程間通信方式,下面請看:

import time
e=Event()
def main(num):
    while True:
        if num5:
            e.clear()   #清空信號標志
            print('清空')
        if num>=5:
            e.wait(timeout=1) #等待信號標志為真
            e.set()
            print('啟動')
            
        if num==10:
            e.wait(timeout=3)
            e.clear()
            print('退出')
            break
        num+=1
        time.sleep(2)
if __name__ == '__main__':
    for y in range(10):
        pp=Process(target=main,args=(y,))
        pp.start()
        pp.join()

管道傳遞消息

管道模塊初始化后返回兩個參數,一個為發送者,一個為接收者,它有個參數可以設置模式為全雙工或者半雙工,全雙工收發一體,半雙工只收或者只發,先了解下它的方法:

p1,p2=m.Pipe(duplex=bool) #設置是否全雙工,返回兩個連接對象
p1.send()  #發送
p2.recv()  #接收
p1.close()  #關閉連接
p1.fileno() #返回連接使用的整數文件描述符
p1.poll([timeout]) #如果連接上的數據可用,返回True,timeout指定等待的最長時限。
p2.recv_bytes([maxlength]) #接收最大字節數
p1.send_bytes([maxlength]) #發送最大字節數
#接收一條完整的字節消息,并把它保存在buffer對象中,offset指定緩沖區中放置消息處的字節位移.
p2.recv_bytes_into(buffer [, offset])

先收后發,其實我們完全可以使用鎖來控制它的首發,可以讓它一邊收一邊發。

隊列

隊列與其它不同的是它采取插入和刪除的方法,讓我們來看下:

def fd(a):
    for y in range(10):
        a.put(y)  #插入數據
        print('插入:',str(y))
def df(b):
    while True:
        aa=b.get(True) #刪除數據
        print('釋放:',str(aa))
if __name__ == '__main__':
    q=Queue()
    ff=Process(target=fd,args=(q,))
    dd=Process(target=df,args=(q,))
    ff.start() #開始運行
    dd.start()
    dd.terminate() #關閉
    ff.join()

以上講的隊列主要用于多進程的隊列,還有一個進程池的隊列,它在Manager模塊中。

八、信號量

與線程中完全一樣,這里不在贅述,看下例:

s=Semaphore(3)
s.acquire()
print(s.get_value())
s.release()
print(s.get_value())
print(s.get_value())
s.release()
print(s.get_value())
s.release()
 
 
output:
2
3
3
4

九、數據共享

共享數據類型可以直接通過進程模塊來設置:

數值型:m.Value()  
數組性:m.Array()  
字典型:m.dict()  
列表型:m.list()

也可以通過進程的Manager模塊來實現:

Manager().dict()
Manager.list()

下面我們就來舉例說明下吧:

可以看到我們成功的將數據添加了進去,形成了數據的共享。

十、總結

通過對進程的描述,相信大家對進程此刻有了個深刻的感悟了吧,突然想起個事,就是大家學習時可能查資料會在網上搜索,那么我建議你專心看好我這篇好了,因為據我所知,那些都是錯的,而且更讓我納悶的是,明明代碼是錯的,放出來的執行效果卻是對的,這讓我百思不得其解,哈哈哈。

到此這篇關于Python基礎之進程詳解的文章就介紹到這了,更多相關Python進程內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python 多進程和多線程使用詳解
  • python 實現多進程日志輪轉ConcurrentLogHandler
  • Python多進程與多線程的使用場景詳解
  • 解決Python 進程池Pool中一些坑
  • python多進程執行方法apply_async使用說明
  • python multiprocessing 多進程并行計算的操作
  • python 進程池pool使用詳解
  • Python使用多進程運行含有任意個參數的函數
  • 詳解python網絡進程

標簽:銅川 常德 阿里 株洲 潛江 通遼 呂梁 黑龍江

巨人網絡通訊聲明:本文標題《Python基礎之進程詳解》,本文關鍵詞  Python,基礎,之,進程,詳解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python基礎之進程詳解》相關的同類信息!
  • 本頁收集關于Python基礎之進程詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久成人av少妇免费| 99久久伊人精品| 日韩精品一区二区三区视频 | 久久狠狠亚洲综合| 亚洲一区二区影院| 亚洲国产精品高清| 久久奇米777| 欧美电视剧在线观看完整版| 欧美性生活一区| 色婷婷亚洲精品| 97精品久久久久中文字幕| 欧美亚洲国产怡红院影院| 国产不卡高清在线观看视频| 久久国产综合精品| 日本不卡在线视频| 日日夜夜精品免费视频| 亚洲成人av一区| 性久久久久久久久| 亚洲成a天堂v人片| 视频精品一区二区| 蜜桃久久久久久| 免费在线观看日韩欧美| 日韩精品乱码av一区二区| 天天免费综合色| 爽爽淫人综合网网站| 五月天视频一区| 日韩av午夜在线观看| 欧美a级理论片| 国产一区三区三区| 国产suv精品一区二区三区| 国产精品夜夜爽| 成人免费高清在线| 99re成人在线| 在线视频欧美精品| 91精品国产综合久久久久久漫画 | 国产福利91精品一区| 国产高清精品在线| 成人国产一区二区三区精品| 成人成人成人在线视频| av中文字幕不卡| 欧美日韩精品一区二区三区| 欧美一区二区视频观看视频| 精品国产亚洲在线| 一区二区中文视频| 免费观看久久久4p| 成人av电影在线| 欧美日韩高清影院| 国产午夜亚洲精品午夜鲁丝片 | 欧美哺乳videos| 国产精品美女一区二区| 亚洲亚洲精品在线观看| 极品美女销魂一区二区三区免费| 在线播放欧美女士性生活| 欧美一区永久视频免费观看| 欧美国产1区2区| 日韩一区欧美二区| 成人av资源在线| 宅男噜噜噜66一区二区66| 中文一区二区在线观看| 三级欧美在线一区| 99久久精品国产导航| 欧美日韩国产大片| 亚洲人123区| 免费欧美在线视频| 欧洲激情一区二区| 国产精品免费观看视频| 久久99久久精品欧美| 在线视频亚洲一区| 国产精品美女久久久久久久久| 日韩黄色免费网站| 色婷婷av一区二区三区gif| 精品国产乱码久久久久久图片| 亚洲影视在线观看| 91丨九色丨黑人外教| 欧美精品一区二| 日本欧美一区二区三区乱码| 在线观看成人小视频| 中文字幕在线观看不卡视频| 国产精品一区二区久激情瑜伽| 6080国产精品一区二区| 久久婷婷国产综合精品青草| 亚洲国产wwwccc36天堂| 成人av免费在线| 日本一区二区三区在线不卡| 免费欧美日韩国产三级电影| 欧美高清你懂得| 亚洲精品成a人| av不卡在线播放| 精品99一区二区三区| 夜夜爽夜夜爽精品视频| 不卡免费追剧大全电视剧网站| xvideos.蜜桃一区二区| 久久99久久99精品免视看婷婷 | 欧美丝袜丝交足nylons图片| 综合久久给合久久狠狠狠97色| 精品一区二区日韩| 在线播放91灌醉迷j高跟美女 | 91福利在线播放| 亚洲色大成网站www久久九九| 99麻豆久久久国产精品免费| 国产精品电影一区二区三区| 99精品久久只有精品| 亚洲男帅同性gay1069| 色狠狠一区二区三区香蕉| 不卡的av网站| 1区2区3区欧美| 欧美在线free| 青娱乐精品在线视频| 日韩欧美国产不卡| 国产成人鲁色资源国产91色综 | 美女一区二区视频| 精品国产乱码久久久久久闺蜜| 精品一区二区三区免费播放| 欧美激情艳妇裸体舞| 99久久精品国产一区二区三区| 亚洲精品成人a在线观看| 在线播放亚洲一区| 国产成人在线观看| 亚洲午夜激情av| 日韩欧美成人午夜| 国产成都精品91一区二区三| 亚洲三级在线免费| 在线播放一区二区三区| 国产精品一卡二卡在线观看| 亚洲欧洲一区二区在线播放| 欧美电影一区二区| 高清beeg欧美| 午夜日韩在线观看| 久久久精品影视| 欧美色国产精品| 国产99久久久久久免费看农村| 亚洲精品成a人| 欧美白人最猛性xxxxx69交| 国产aⅴ综合色| 奇米色777欧美一区二区| 中文字幕欧美国产| 欧美精品aⅴ在线视频| 国产91精品久久久久久久网曝门| 亚洲尤物在线视频观看| 久久久99久久| 69堂成人精品免费视频| 97久久久精品综合88久久| 日欧美一区二区| 综合久久给合久久狠狠狠97色 | 亚洲欧美综合另类在线卡通| 欧美一区二区三区在线观看视频| 91偷拍与自偷拍精品| 国产一区二区美女诱惑| 亚洲国产精品一区二区久久恐怖片| 欧美日韩国产美| 懂色av噜噜一区二区三区av| 视频在线在亚洲| 亚洲宅男天堂在线观看无病毒| 精品久久一区二区三区| 欧美性生交片4| 色天天综合色天天久久| 成人中文字幕合集| 国产综合一区二区| 色综合久久久久网| 岛国av在线一区| 激情六月婷婷久久| 日产精品久久久久久久性色| 亚洲一区二区三区四区不卡| 亚洲女人****多毛耸耸8| 日本一区二区久久| 在线不卡欧美精品一区二区三区| av在线播放不卡| 国产精品系列在线观看| 精品一区二区三区久久久| 日韩和欧美一区二区| 亚洲黄色在线视频| 国产精品久久久久影视| 欧美国产日本韩| 欧美激情一区不卡| 国产精品黄色在线观看| 国产精品国产自产拍在线| 亚洲视频免费观看| ㊣最新国产の精品bt伙计久久| 中文字幕免费观看一区| 国产精品亲子乱子伦xxxx裸| 国产日韩欧美在线一区| 中文字幕二三区不卡| 国产精品水嫩水嫩| 国产精品白丝在线| 最新日韩av在线| 尤物视频一区二区| 亚洲国产精品一区二区www | 日本免费新一区视频| 麻豆精品一区二区| 日韩在线一区二区| 精品一区二区免费在线观看| 大胆亚洲人体视频| 色呦呦一区二区三区| 欧美三级日本三级少妇99| 欧美精品精品一区| 精品美女在线播放| 欧美激情一区二区三区全黄| 日韩一区日韩二区| 亚洲一区二区三区四区五区中文 | 欧美日韩高清一区二区|