• Python 多线程、多进程、协成的使用


    写在前面将列表分割供多进程、多线程使用

    def list_fund(listTemp, n):
        """
        将列表平均分成N块
        :param listTemp:
        :param n:
        :return:
        """
        resules = []
        for i in range(0, len(listTemp), n):
            temp = listTemp[i:i + n]
            resules.append(temp)
        return resules

     线程池的使用

    import time
    import threadpool
    
    
    def sayhello(str):
        print("Hello ", str)
        time.sleep(2)
    
    
    name_list = ['xiaozi', 'aa', 'bb', 'cc']
    start_time = time.time()
    pool = threadpool.ThreadPool(4)
    requests = threadpool.makeRequests(sayhello, name_list)
    [pool.putRequest(req) for req in requests]
    pool.wait()
    print('%d second' % (time.time() - start_time))

    多进程的使用

    num = 5
    p = Pool(num - 1)
    for i in range(num):
        p.apply_async(threading_push, args=(part_data_list[i],))
    
    p.close()
    p.join()
    logger.info("多进程 线程推送成功1 用时:{}".format(round(time.time() - start_time, 4)))

    进程池的使用

    p = Pool(4)  # 创建一个包含5个进程的进程池
    print("tuisongshuju:{}".format(pool_data_list))
    for i in pool_data_list:
        p.apply_async(func=threading_push, args=(i,))
    
    p.close()  # 等子进程执行完毕后关闭进程池
    # time.sleep(2)
    # p.terminate()     # 立刻关闭进程池
    p.join()

    协程池

    import gevent
    import gevent.pool
    import gevent.monkey
    gevent.monkey.patch_all()#分布式冲突
    def run_task(data):
        print(data)
    if __name__=="__main__": mypool=gevent.pool.Pool(2) datalist=[x for x in range(10)] result=mypool.map(run_task,datalist) print(result)
  • 相关阅读:
    java微信扫码支付(模式二)
    Python学习08
    学习java第12天
    学习java第11天
    学习java第十天
    学习Java第九天
    学习Java第八天
    学习Java第六天
    学习Java第六天
    学习Java第五天
  • 原文地址:https://www.cnblogs.com/zhaoyingjie/p/13360243.html
Copyright © 2020-2023  润新知