zoukankan      html  css  js  c++  java
  • Python多进程VS多线程

    多线程:适用于处理I/O密集型任务和并发执行的阻塞操作
    多进程:适用于处理计算密集型任务

    # 多进程
    import itertools
    from concurrent.futures import ProcessPoolExecutor
    result = []
    
    # 回调函数,通过add_done_callback任务完成后调用
    def when_done(r):
        # when_done在主进程中运行
        result.append(r.result())
    
    """
        with class_a() as a: 上下文管理器
    """
    with ProcessPoolExecutor() as pool:
        for keep_stock_threshold, buy_change_threshold in 
                itertools.product(keep_stock_list, buy_change_list):
    
            """
                submit提交任务:使用calc函数和的参数通过submit提交到独立进程
                提交的任务必须是简单函数,进程并行不支持类方法、闭包等
                函数参数和返回值必须兼容pickle序列化,进程间的通信需要
            """
            future_result = pool.submit(calc, keep_stock_threshold,
                                        buy_change_threshold)
            # 当进程完成任务即calc运行结束后的回调函数
            future_result.add_done_callback(when_done)
    print(sorted(result)[::-1][:10])
    # 多线程
    from concurrent.futures import ThreadPoolExecutor
    
    result = []
    def when_done(r):
        result.append(r.result())
    
    with ThreadPoolExecutor(max_workers=8) as pool:
        for keep_stock_threshold, buy_change_threshold in 
                itertools.product(keep_stock_list, buy_change_list):
            future_result = pool.submit(calc, keep_stock_threshold,
                                        buy_change_threshold)
            future_result.add_done_callback(when_done)
  • 相关阅读:
    网页 js 获取DPI pxTomm
    利用自定义属性实现js点击事件 委托
    鼠标移动div时禁止选中div中的文字的方法
    关于if简写语句优化的方法
    .clearfix::after(清除浮动)
    js 事件委托
    清空共享池
    oracle中scott用户权限不足
    安装完Oracle 12C数据库,scott账户过期,解锁方法
    Vulnhub靶场-Me Tomcat Host 学习笔记
  • 原文地址:https://www.cnblogs.com/bitquant/p/8648951.html
Copyright © 2011-2022 走看看