zoukankan      html  css  js  c++  java
  • python 的多线程执行速度

    python 的多线程有点鸡肋,适用场景有局限,单位时间多个核只能跑一个线程。

    有泳池一个,四个泵,但只有一个人,一人只能开启管理着其中一个,所以四个泵没什么用。但是,如果泵的工作时间与冷却恢复时间是1:3(感谢inoahx指出,已改),那么配置的利用率高达100%。
    直接运行代码
    single.py
    #!/usr/bin/python3
    #-*- coding: utf-8 -*-
    # author:zhouchao
    # 功能:直接运行程序 计算时间
    
    import threading
    import sys
    import math
    import time
    
    lists = [];
    for x in range(1,10000000):
        lists.append(x);
    
    
    length = len(lists);
    for x in range(600):
        step = math.ceil(float(length)/600)
        minIndex = step * x
        if minIndex + step > length :
            maxIndex = length
        else:
            maxIndex = minIndex+step
    
        print(lists[minIndex:maxIndex])
        datetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 
        fileObject = open("time1.txt",'a+');
        fileObject.write(str(datetime)+"
    ");
        fileObject.close();

    所需时间:134 s

    开600 个线程运行同一代码

    multiThread.py

    #!/usr/bin/python3
    #-*- coding: utf-8 -*-
    # author:zhouchao
    # 功能:600线程计算执行时间
    
    
    import threading
    import sys
    import math
    import time
    
    lists = [];
    for x in range(1,10000000):
        lists.append(x);
    
    
    def function(i):
        global lists
        length = len(lists);
        step = math.ceil(float(length)/600)
        minIndex = step * i
        if minIndex + step > length :
            maxIndex = length
        else:
            maxIndex = minIndex+step
    
        print(lists[minIndex:maxIndex])
        datetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 
        # datetime = str(lists[minIndex:maxIndex])
        fileObject = open("time2.txt",'a+');
        fileObject.write(str(datetime)+"
    ");
        fileObject.close();
    
    
    threads = []
    for i in range(600):
        t = threading.Thread(target=function , args=(i,))
        threads.append(t)
        t.start()
        t.join()

    所需时间:160 s 

  • 相关阅读:
    好听的歌 好音乐
    dubbox编译
    [HDU3038]How Many Answers Are Wrong(并查集)
    [POJ1733]Parity game(并查集 + 离散化)
    [POJ1703]Find them, Catch them(并查集)
    [luoguP2024] 食物链(并查集)
    [luoguP3355] 骑士共存问题(二分图最大独立集)
    火星探险问题
    [CODEVS1917] 深海机器人问题(最小费用最大流)
    [CODEVS1916] 负载平衡问题(最小费用最大流)
  • 原文地址:https://www.cnblogs.com/zc123/p/8469003.html
Copyright © 2011-2022 走看看