黄视频网站在线免费观看-黄视频网站在线看-黄视频网站在线观看-黄视频网站免费看-黄视频网站免费观看-黄视频网站免费

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Python編程中,如何使用多進程完成多任務進程有哪些注意點?

Python編程中,如何使用多進程完成多任務進程有哪些注意點?

來源:千鋒教育
發布人:xqq
時間: 2023-10-13 06:53:34 1697151214

一、Python編程中,使用多進程完成多任務的方法

Python提供了multiprocessing模塊,可以用于在單個計算機上創建多個進程,從而實現多任務處理。下面是一個簡單的例子,展示了如何使用multiprocessing模塊創建多進程來完成多任務。

代碼:

import multiprocessingimport time# 跳舞任務def dance():    for i in range(5):        print("跳舞中...")        time.sleep(0.2)# 唱歌任務def sing():    for i in range(5):        print("唱歌中...")        time.sleep(0.2)if __name__ == '__main__':    # 創建跳舞的子進程    # group: 表示進程組,目前只能使用None    # target: 表示執行的目標任務名(函數名、方法名)    # name: 進程名稱, 默認是Process-1, .....    dance_process = multiprocessing.Process(target=dance, name="myprocess1")    sing_process = multiprocessing.Process(target=sing)    # 啟動子進程執行對應的任務    dance_process.start()    sing_process.start()

執行結果:

唱歌中...跳舞中...唱歌中...跳舞中...唱歌中...跳舞中...唱歌中...跳舞中...唱歌中...跳舞中...

二、進程有哪些注意點

1、進程之間不共享全局變量

代碼:

import multiprocessingimport time# 定義全局變量g_list = list()# 添加數據的任務def add_data():    for i in range(5):        g_list.append(i)        print("add:", i)        time.sleep(0.2)    # 代碼執行到此,說明數據添加完成    print("add_data:", g_list)def read_data():    print("read_data", g_list)if __name__ == '__main__':    # 創建添加數據的子進程    add_data_process = multiprocessing.Process(target=add_data)    # 創建讀取數據的子進程    read_data_process = multiprocessing.Process(target=read_data)    # 啟動子進程執行對應的任務    add_data_process.start()    # 主進程等待添加數據的子進程執行完成以后程序再繼續往下執行,讀取數據    add_data_process.join()    read_data_process.start()    print("main:", g_list)    # 總結: 多進程之間不共享全局變量

執行結果:

add: 0
add: 1
add: 2
add: 3
add: 4
add_data: [0, 1, 2, 3, 4]
main: []
read_data []

創建子進程會對主進程資源進行拷貝,也就是說子進程是主進程的一個副本,好比是一對雙胞胎,之所以進程之間不共享全局變量,是因為操作的不是同一個進程里面的全局變量,只不過不同進程里面的全局變量名字相同而已。

2、主進程會等待所有的子進程執行結束再結束

假如我們現在創建一個子進程,這個子進程執行完大概需要2秒鐘,現在讓主進程執行0.5秒鐘就退出程序,查看一下執行結果,示例代碼如下:

import multiprocessingimport time# 定義進程所需要執行的任務def task():    for i in range(10):        print("任務執行中...")        time.sleep(0.2)if __name__ == '__main__':    # 創建子進程    sub_process = multiprocessing.Process(target=task)    sub_process.start()    # 主進程延時0.5秒鐘    time.sleep(0.5)    print("over")    exit()    # 總結:主進程會等待所有的子進程執行完成以后程序再退出

執行結果:

任務執行中...任務執行中...任務執行中...over任務執行中...任務執行中...任務執行中...任務執行中...任務執行中...任務執行中...任務執行中...

說明:通過上面代碼的執行結果,我們可以得知:主進程會等待所有的子進程執行結束再結束。

假如我們就讓主進程執行0.5秒鐘,子進程就銷毀不再執行,那怎么辦呢?我們可以設置守護主進程或者在主進程退出之前讓子進程銷毀:

守護主進程:守護主進程就是主進程退出子進程銷毀不再執行子進程銷毀:子進程執行結束

保證主進程正常退出的示例代碼:

import multiprocessingimport time# 定義進程所需要執行的任務def task():    for i in range(10):        print("任務執行中...")        time.sleep(0.2)if __name__ == '__main__':    # 創建子進程    sub_process = multiprocessing.Process(target=task)    # 設置守護主進程,主進程退出子進程直接銷毀,子進程的生命周期依賴與主進程    # sub_process.daemon = True    sub_process.start()    time.sleep(0.5)    print("over")    # 讓子進程銷毀    sub_process.terminate()    exit()    # 總結:主進程會等待所有的子進程執行完成以后程序再退出    # 如果想要主進程退出子進程銷毀,可以設置守護主進程或者在主進程退出之前讓子進程銷毀

執行結果:

任務執行中...任務執行中...任務執行中...over

三、Python多線程的通信

進程是系統獨立調度核分配系統資源(CPU、內存)的基本單位,進程之間是相互獨立的,每啟動一個新的進程相當于把數據進行了一次克隆,子進程里的數據修改無法影響到主進程中的數據,不同子進程之間的數據也不能共享,這是多進程在使用中與多線程最明顯的區別。但是難道Python多進程中間難道就是孤立的嗎?當然不是,python也提供了多種方法實現了多進程中間的通信和數據共享(可以修改一份數據)。

1、進程對列Queue

Queue在多線程中也說到過,在生成者消費者模式中使用,是線程安全的,是生產者和消費者中間的數據管道,那在python多進程中,它其實就是進程之間的數據管道,實現進程通信。

from multiprocessing import Process,Queuedef fun1(q,i):    print('子進程%s 開始put數據' %i)    q.put('我是%s 通過Queue通信' %i)if __name__ == '__main__':    q = Queue()    process_list = []    for i in range(3):        p = Process(target=fun1,args=(q,i,))  #注意args里面要把q對象傳給我們要執行的方法,這樣子進程才能和主進程用Queue來通信        p.start()        process_list.append(p)    for i in process_list:        p.join()    print('主進程獲取Queue數據')    print(q.get())    print(q.get())    print(q.get())    print('結束測試')

結果:

子進程0 開始put數據子進程1 開始put數據子進程2 開始put數據主進程獲取Queue數據我是0 通過Queue通信我是1 通過Queue通信我是2 通過Queue通信結束測試Process finished with exit code 0

上面的代碼結果可以看到我們主進程中可以通過Queue獲取子進程中put的數據,實現進程間的通信。

2、管道Pipe

管道Pipe和Queue的作用大致差不多,也是實現進程間的通信。

from multiprocessing import Process, Pipedef fun1(conn):    print('子進程發送消息:')    conn.send('你好主進程')    print('子進程接受消息:')    print(conn.recv())    conn.close()if __name__ == '__main__':    conn1, conn2 = Pipe() #關鍵點,pipe實例化生成一個雙向管    p = Process(target=fun1, args=(conn2,)) #conn2傳給子進程    p.start()    print('主進程接受消息:')    print(conn1.recv())    print('主進程發送消息:')    conn1.send("你好子進程")    p.join()    print('結束測試')

結果:

主進程接受消息:子進程發送消息:子進程接受消息:你好主進程主進程發送消息:你好子進程結束測試Process finished with exit code 0

上面可以看到主進程和子進程可以相互發送消息。

3、Managers

Queue和Pipe只是實現了數據交互,并沒實現數據共享,即一個進程去更改另一個進程的數據。那么就要用到Managers。

from multiprocessing import Process, Managerdef fun1(dic,lis,index):    dic[index] = 'a'    dic['2'] = 'b'        lis.append(index)    #[0,1,2,3,4,0,1,2,3,4,5,6,7,8,9]    #print(l)if __name__ == '__main__':    with Manager() as manager:        dic = manager.dict()#注意字典的聲明方式,不能直接通過{}來定義        l = manager.list(range(5))#[0,1,2,3,4]        process_list = []        for i in range(10):            p = Process(target=fun1, args=(dic,l,i))            p.start()            process_list.append(p)        for res in process_list:            res.join()        print(dic)        print(l)

結果:

{0: 'a', '2': 'b', 3: 'a', 1: 'a', 2: 'a', 4: 'a', 5: 'a', 7: 'a', 6: 'a', 8: 'a', 9: 'a'}[0, 1, 2, 3, 4, 0, 3, 1, 2, 4, 5, 7, 6, 8, 9]

可以看到主進程定義了一個字典和一個列表,在子進程中,可以添加和修改字典的內容,在列表中插入新的數據,實現進程間的數據共享,即可以共同修改同一份數據。

延伸閱讀1:Python協程簡介

協程,又稱微線程,纖程,英文名Coroutine。協程的作用是在執行函數A時可以隨時中斷去執行函數B,然后中斷函數B繼續執行函數A(可以自由切換)。但這一過程并不是函數調用,這一整個過程看似像多線程,然而協程只有一個線程執行。

聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
日本伦理片网站| 青青青草影院| 精品国产三级a∨在线观看| 日韩一级黄色片| 精品视频在线看| 国产亚洲精品aaa大片| 国产精品自拍在线观看| 九九九网站| 久久99这里只有精品国产| 国产精品自拍在线观看| 天天做日日干| 亚洲 欧美 91| 久久国产精品自由自在| 亚洲精品久久久中文字| 国产一区国产二区国产三区| 成人免费高清视频| 台湾毛片| 九九热国产视频| 成人免费高清视频| 国产国语对白一级毛片| 九九热国产视频| 999久久66久6只有精品| 国产国语对白一级毛片| 日韩av片免费播放| 国产韩国精品一区二区三区| 美女免费精品视频在线观看| 成人影视在线播放| 欧美激情在线精品video| 国产一区二区精品久久91| 欧美激情在线精品video| 九九久久国产精品| 久久99中文字幕| 亚洲 欧美 91| 尤物视频网站在线观看| 国产成人精品在线| 精品国产一区二区三区久 | 久久成人综合网| 韩国三级视频网站| 午夜欧美福利| 精品国产三级a∨在线观看| 国产91精品一区| 成人免费高清视频| 四虎影视久久久| 九九久久99综合一区二区| 国产不卡在线看| 香蕉视频三级| 久久久成人网| 在线观看成人网 | 99色视频在线观看| 成人a大片高清在线观看| 成人免费观看视频| 天天做日日干| 精品久久久久久中文字幕一区| 毛片电影网| 欧美国产日韩一区二区三区| 久久国产精品自线拍免费| 91麻豆精品国产片在线观看| 国产国产人免费视频成69堂| 一级女性全黄生活片免费| 成人免费一级毛片在线播放视频| 亚洲精品久久久中文字| 四虎影视库国产精品一区| 欧美一级视频高清片| 国产不卡高清在线观看视频| 麻豆污视频| 黄视频网站免费| 亚洲天堂在线播放| 毛片电影网| 美女免费黄网站| 国产高清视频免费| 亚洲爆爽| 美女被草网站| 久久久久久久网| 成人免费观看的视频黄页| 亚洲第一色在线| 九九干| 精品久久久久久中文字幕一区 | 亚洲天堂一区二区三区四区| 国产麻豆精品高清在线播放| 亚洲精品影院| 久久精品道一区二区三区| 欧美爱爱网| 国产一级强片在线观看| 中文字幕97| 深夜做爰性大片中文| 久久久成人网| 九九精品久久| 精品在线免费播放| 色综合久久久久综合体桃花网| 精品在线免费播放| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 成人高清视频免费观看| 国产伦久视频免费观看视频| 国产一级强片在线观看| 国产高清在线精品一区二区| 国产一区二区精品在线观看| 国产a网| 麻豆系列国产剧在线观看| 精品视频在线看| 欧美另类videosbestsex| 黄色福利| 久久国产一区二区| 一级毛片视频在线观看| 国产视频一区二区在线观看| 亚欧乱色一区二区三区| 日韩欧美一二三区| 四虎精品在线观看| 免费毛片基地| 日本伦理片网站| 亚洲 国产精品 日韩| 超级乱淫黄漫画免费| 国产视频一区二区三区四区 | 欧美激情影院| 色综合久久天天综线观看| 精品久久久久久免费影院| 香蕉视频久久| 韩国三级视频在线观看| 四虎影视久久| 精品国产一区二区三区免费| 精品国产一区二区三区久久久蜜臀| 一级毛片看真人在线视频| 日韩专区亚洲综合久久| 久久国产精品只做精品| 一a一级片| 国产欧美精品午夜在线播放| 日韩中文字幕一区二区不卡| 天天色色色| 精品在线免费播放| 精品久久久久久中文| 日本在线播放一区| 麻豆系列国产剧在线观看| 九九热国产视频| 国产一区二区精品| 亚洲 激情| 欧美激情影院| 精品国产一区二区三区国产馆| 久久久成人影院| 黄视频网站在线免费观看| 一级女性全黄生活片免费| 成人av在线播放| 免费一级片在线| 四虎影视精品永久免费网站 | 九九九网站| 成人免费观看的视频黄页| 午夜在线影院| 国产一级生活片| 四虎影视库| 国产91精品系列在线观看| 精品国产一区二区三区久久久蜜臀| 国产视频一区在线| 青青久在线视频| 午夜在线影院| 精品国产一区二区三区精东影业 | 日韩中文字幕在线播放| 日本特黄特色aaa大片免费| 午夜在线影院| 中文字幕一区二区三区精彩视频| 91麻豆国产级在线| 亚久久伊人精品青青草原2020| 四虎影视库| 国产精品1024在线永久免费| 成人免费一级毛片在线播放视频| 欧美激情伊人| 午夜家庭影院| 黄视频网站免费观看| 欧美激情中文字幕一区二区| 中文字幕Aⅴ资源网| 日本免费看视频| 国产成人精品影视| 成人高清视频免费观看| 国产伦久视频免费观看视频| 欧美激情一区二区三区视频高清| 日本在线不卡免费视频一区| 四虎影视库国产精品一区| 精品视频一区二区三区| 免费一级片在线| 精品国产一区二区三区久 | 久草免费在线观看| 国产不卡在线观看视频| 国产极品精频在线观看| 四虎精品在线观看| 青青久在线视频| 91麻豆精品国产高清在线| 国产a毛片| 午夜在线亚洲| 国产欧美精品午夜在线播放| 韩国三级一区| 99热热久久| 四虎久久影院| 黄色短视频网站| 成人影视在线播放| 免费国产在线观看不卡| 精品视频在线观看视频免费视频| 在线观看成人网 | 欧美a级大片| 91麻豆精品国产自产在线| 色综合久久天天综合绕观看| 欧美一级视频免费| 日韩中文字幕一区二区不卡| 成人a大片在线观看|