Python 进程、进程通信 进程池

2018-09-20  本文已影响321人  梅花鹿数据

一:多进程的优点、应用场景

耗CPU计算时多进程速度大于多线程,可以最大化利用CPU计算。多进程有更强的容错性,一个进程出错不会影响其他进程。通常不需要考虑锁和同步资源的问题。

二:进程使用方法

三: 进程间通信

四:进程的实例代码

#方法一:multiprocessing.Process
import multiprocessing
import requests

def download_html(i):
    url = f'https://www.baidu.com/s?ie=UTF-8&wd={i}'
    response = requests.get(url).text
    print(response)

ids = list(range(100))

# 方法一
for i in range(5):
    p = multiprocessing.Process(target=process, args=(i,))
    p.start()


# 方法二
def multipro_main(ids ):
    pool = multiprocessing.Pool(10)
    pool.map(download_html, ids)
    pool.close()
    pool.join()

# 方法三
from multiprocessing.dummy import   Pool as thpool
def thread_pool(ids ):
    pool = thpool(10)
    pool.map(download_html, ids)
    pool.close()
    pool.join()

# 方法四 (推荐,和多线程接口类似)
from concurrent.futures import ProcessPoolExecutor
with ProcessPoolExecutor(10) as executor:
    executor.map(download_html, ids)

五:总结

concurrent.futures 是一个非常不错的库,多线程和多进程无缝切换,非常方便。这个库设计思路也很好,为后面的写异步协程的代码也打下基础。
代码位置:github.com/rieuse/learnPython

上一篇 下一篇

猜你喜欢

热点阅读