程序ip
應用場景
提示 小結
fork
forkserver
設定程序的啟動方式
get_context()
方法來獲取context
物件
map(func, iterable[, chunksize])
map_async(func, iterable[, chunksize[, callback[, error_callback]]])
imap(func, iterable[, chunksize])
這是 map() 方法的延遲版本
imap_unordered(func, iterable[, chunksize])
starmap(func, iterable[,chunksize])
close()
關閉程序池,把當前程序池中的所有任務執行完成後再關閉自己
terminate()
立即中止程序池
join()
等待所有程序完成
技巧
import multiprocessing
import os
import time
# 程序任務函式
def action(max):
my_sum = 0
for i in range(max):
print('(%s) 程序正在執行: %d' % (os.getpid(), i))
my_sum += i
return my_sum
if __name__ == '__main__':
# 建立乙個包含4條程序的程序池
with multiprocessing.pool(processes=4) as pool:
results = pool.map(action, (5, 10, 15))
print('--------------')
for r in results:
print(r)
multiprocessing
模組下的 queue
使用pipe實現程序間通訊
pipeconnection
常用方法
recv()
接收另一端通過 send() 方法傳送過來的資料
fileno()
關於連線所使用的檔案描述器
close()
關閉連線
poll([timeout])
返回連線中是否還有資料可以讀取
send_bytes(buffer[, offset[, size]])
傳送位元組資料
recv_bytes([maxlength])
maxlength 指定最多接收的位元組數
recv_bytes_into(buffer[, offset])
功能與 recv_bytes() 方法類似,只是該方法將接收到的資料放在 buffer 中
import multiprocessing
def f(conn):
print('(%s) 程序開始傳送資料...' % multiprocessing.current_process().pid)
conn.send('python')
if __name__ == '__main__':
# 建立pipe,該函式返回兩個pipeconnection物件
parent_conn, child_conn = multiprocessing.pipe()
# 建立子程序
p = multiprocessing.process(target=f, args=(child_conn,))
# 啟動子程序
p.start()
print('(%s) 程序開始接收資料...' % multiprocessing.current_process().pid)
# 通過管道來讀取內容,等待解除阻塞
print(parent_conn.recv())
# 阻塞主程序,直到子程序執行完畢,才解除
p.join()
python多程序 Python多程序程式設計詳解
本文 在 python 3.6 環境下測試通過。多程序 multiprocessing 模組是在 python 2.6 版本中加入的,和多執行緒 threading 模組類似,都是用來做並行運算的。不過python既然有了threading,為什麼還要搞乙個multiprocessing呢?這是因為...
python 多程序程式設計
多程序指的是乙個程式可以啟動多個程序執行,一般模式如下 import multiprocessing from multiprocessing import process,current process import time cup 核數量 num cpus multiprocessing.cp...
python多程序程式設計
python多程序程式設計。最近開始學習python程式語言,詳細參照 python絕技運用python成為頂級黑客 在學習過程第一章節中,編寫破解linux shadow檔案時,想利用多執行緒加快破解速度。主機執行環境為windows下的vm workstation上的一台虛擬機器,執行多執行緒 ...