Python 程序池
阿新 • • 發佈:2018-12-15
– Start
ProcessPoolExecutor
我們使用 ProcessPoolExecutor 定義程序池。
任務沒有返回值
import multiprocessing from concurrent.futures import ProcessPoolExecutor import time def my_task(): for i in range(3): print(f'{multiprocessing.current_process().pid} - {i}') time.sleep(1) if __name__ == '__main__': with ProcessPoolExecutor(max_workers=3) as executor: executor.submit(my_task) executor.submit(my_task) executor.submit(my_task)
任務有返回值
import multiprocessing from concurrent.futures import ProcessPoolExecutor import time import random def my_task(): r = random.randint(1, 100) time.sleep(1) print(f'{multiprocessing.current_process().pid} - {r}') return r if __name__ == '__main__': with ProcessPoolExecutor(max_workers=3) as executor: future1 = executor.submit(my_task) future2 = executor.submit(my_task) future3 = executor.submit(my_task) # result 會阻塞 print(future3.result()) print(future2.result()) print(future3.result())
資料並行
import multiprocessing from concurrent.futures import ProcessPoolExecutor import time def my_task(x): print(f'{multiprocessing.current_process().pid} - {x}') return pow(x, 2) if __name__ == '__main__': with ProcessPoolExecutor(max_workers=3) as executor: executor.map(my_task, range(100))
Pool
import multiprocessing
import time
from multiprocessing import Pool
def my_task():
for i in range(3):
print(f'{multiprocessing.current_process().pid} - {i}')
time.sleep(1)
def my_fun(x):
print(f'{multiprocessing.current_process().pid} - {x}')
return pow(x, 2)
if __name__ == '__main__':
with Pool(processes=4) as pool:
# apply 同步執行,會阻塞
res = pool.apply(my_task)
# apply_async 非同步執行
res = pool.apply_async(my_task)
print(res.get(timeout=5))
# 資料併發
print(pool.map(my_fun, list(range(100))))
– 更多參見:
– 聲 明:轉載請註明出處
– Last Updated on 2018-10-14
– Written by ShangBo on 2018-10-14
– End