美文网首页
python 进程与并发

python 进程与并发

作者: 热爱PYTHON的小白 | 来源:发表于2020-03-24 16:47 被阅读0次
    多进程: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())
    

    相关文章

      网友评论

          本文标题:python 进程与并发

          本文链接:https://www.haomeiwen.com/subject/vqooyhtx.html