python 进程与并发

2020-03-24  本文已影响0人  热爱PYTHON的小白
多进程:Python中提供multiprocess模块实现多进程并发
import multiprocessing
import time
def worker():
    number = 0
    for i in range(10000000):
        number += 1
        time.sleep(0.1)
        print(multiprocessing.current_process().name)  # 获取当前进程的名称
        print('循环次数:{} number:{}'.format(i+1,number ))
if __name__ == '__main__':
    for i in range(4):
        process = multiprocessing.Process(target=worker, name='process worker {}'.format(i))
        process.start()
        print(process.pid) # 获取进程的pid
        print(process.exitcode) # 获取退出状态码
        print(process.name)  # 获取进程名称
        time.sleep(30)
        print(process.terminate()) # 终止进程

进程并发:concurrent模块

虽然multiprocess模块有一个Pool类,但是一般而言,用的多的还是ProcessPoolExecutor,异步进程池

pool的对象方法
①:submit()
②:map()
③:shutdown(): 清理进程池
submit()方法的返回值future对象的方法
①:result():查看调用的返回结果
②:done():如果任务成功执行或任务取消返回True
③:cancel():取消任务
④:running(): 如果任务正在执行返回True
⑤:exception(): 获取执行抛出的异常

from concurrent.futures import ProcessPoolExecutor
import requests

def fetch_url(url):
    result = requests.get(url=url, )
    return result.text

if __name__ == '__main__':
    # 创建10个线程队列的线程池
    pool = ProcessPoolExecutor(10)
    # 获取任务返回对象
    a = pool.submit(fetch_url, 'http://www.yuxiaokeji.cn')
    b = pool.submit(fetch_url, 'http://www.yuxiaokeji.cn')
    # 取出返回的结果
    x = a.result()
    y = b.result()
    print(x)
    print(y)

使用上下文管理
if __name__ == '__main__':
    with ProcessPoolExecutor(max_workers=10) as pool:
        a = pool.submit(fetch_url, 'http://www.yuxiaokeji.cn')
        print(a.result())
上一篇下一篇

猜你喜欢

热点阅读