-
? 進程是操作系統分配內存的最小單位
-
? Python中進程用到的庫 multiprocessing
-
? 簡單的多進程示例
from multiprocessing import Process
from time import time,sleep
from random import randint
def download_task(task_name):
print(task_name+'開始下載')
time =randint(1,5)
sleep(time)
print(task_name+f'下載結束,用時{time}s')
def main():
print('開始下載。。。')
start_time = time()
p1 = Process(target=download_task,args=('task_1',))
p1.start()
p2 = Process(target=download_task,args=('task_2',))
p2.start()
p1.join()
p2.join()
end_time = time()
print(f'下載結束,總用時{end_time-start_time}s')
if __name__ == '__main__':
main()
-
?進程間的通信
- 多進程的內存空間是獨立的不能使用普通的全局變量來傳遞信號
- 可以使用multiprocessing 中的?Queue、Pipe、Manager、Event
- 今天只復習queue和pipe
-
Queue 實現進程間通信示例如下:要注意的是:Queue 是為進程服務的而 queue中的Queue 是為線程服務的
from multiprocessing import Process,Queue,current_process def add_task(q): print(f'子進程{current_process().pid}操作') q.put('python') def main(): #創建進程通信的 Queue q = Queue() #創建子進程 p = Process(target=add_task,args=(q,)) p.start() print(f'父進程{current_process().pid}讀取') print(q.get()) p.join() if __name__ == '__main__': main()
?
-
Pipe 實現進程間通信,示例如下:
from multiprocessing import Process,Pipe,current_process
def add_task(p_b):
print(f"進程 {current_process().pid} 寫入")
p_b.send("python")
def main():
#創建管道 ,返回管道兩端
p_a ,p_b= Pipe()
p =Process(target=add_task,args=(p_b,))
p.start()
print(f"進程 {current_process().pid} 讀取")
print(p_a.recv())
p.join()
if __name__ == '__main__':
main()
好了 進程今天就復習到這兒。明晚復習線程。。。
?
?
加油!
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
