zoukankan      html  css  js  c++  java
  • 量化编程技术—多线程和多进程

    # -*- coding: utf-8 -*-
    # @Date:   2017-08-26
    # @Original:
    
    # 多进程
    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)
  • 相关阅读:
    java并发ThreadLocal
    PermGen space 与 Java heap space
    java vm内存设置
    linux下ssh使用和配置
    ubuntu进入命令登录界面
    7-21 求前缀表达式的值
    7-20 表达式转换
    7-19 求链式线性表的倒数第K项
    7-18 银行业务队列简单模拟
    7-17 汉诺塔的非递归实现
  • 原文地址:https://www.cnblogs.com/bitquant/p/11521512.html
Copyright © 2011-2022 走看看