三分钟带你掌握Python中的多进程和多线程

1. 多进程

      本段代码教你使用多进程模块multiprocessing,定义了func(里面sleep两秒,比较耗时),你只需要修改功能函数即可用来做你的任务。对同一任务,用多进程和不用多进程进行了比较,应用速度会得到明显提升。

#coding:UTF-8
import multiprocessing
import time
from tqdm import tqdm

class MyMultiprocess(object):
    def __init__(self, process_num):
        self.pool = multiprocessing.Pool(processes=process_num)

    def work(self, func, args):
        result = []
        for arg in args:
            result.append(self.pool.apply_async(func, (arg,)))
        self.pool.close()
        self.pool.join()
        finally_result = []
        for res in result:
            finally_result.append(res.get())
        return finally_result

def func(num):
    """
    功能函数
    """
    for i in tqdm(range(10)):
        time.sleep(2)
    return num*num


if __name__ == "__main__":
    start = time.time()
    mymultiprocess = MyMultiprocess(5)
    res = mymultiprocess.work(func, [1,2,3,4,5])
    print(res)
    end = time.time()
    print("应用多进程耗时: %s" % (end-start))

    start = time.time()
    res = []
    for i in range(1, 6):
        j = func(i)
        res.append(j)
    print(res)
    end = time.time()
    print("不用多进程耗时: %s" % (end-start))

  运行结果:

Caption

2. 多线程

      本段代码教你使用多线程模threading,定义了func(里面sleep两秒,比较耗时),你只需要修改功能函数即可用来做你的任务。对同一任务,用多线程和不用多线程进行了比较,应用速度会得到明显提升。

import threading
import time
from tqdm import tqdm

class MyThread(threading.Thread):
    
    def __init__(self, func, args=()):
        super(MyThread, self).__init__()
        self.func = func
        self.args = args

    def run(self):
        self.result = self.func(*self.args)

    def get_result(self):
        try:
            return self.result
        except Exception:
            return None


def func(num):
    """
    功能函数
    """
    for i in tqdm(range(10)):
        time.sleep(2)
    return num*num


if __name__ == "__main__":
    start = time.time()
    threads = []
    results = []
    for i in [1,2,3,4,5]:
        t = MyThread(func, args=(i,))
        threads.append(t)
        t.start()

    for t in threads:
        t.join()
        results.append(t.get_result())
    print(results)
    end = time.time()
    print("应用多线程耗时: %s" % (end-start))


    start = time.time()
    results = []
    for i in [1,2,3,4,5]:
        result = func(i)
        results.append(result)
    print(results)
    end = time.time()
    print("不用多线程耗时: %s" % (end-start))

    运行结果:

Caption

就是这么简单,放心使用吧!!!

发布了10 篇原创文章 · 获赞 14 · 访问量 1300

猜你喜欢

转载自blog.csdn.net/Guo_Python/article/details/105598733