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

  1. 多进程
    本段代码教你使用多进程模块multiprocessing,定义了func(里面sleep两秒,比较耗时),你只需要修改功能函数即可用来做你的任务。对同一任务,用多进程和不用多进程进行了比较,应用速度会得到明显提升。
'''
想最快的入门Python吗?请搜索:"泉小朵",来学习Python最快入门教程。
也可以加入我们的Python学习Q群:902936549,看看前辈们是如何学习的。
'''
#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))

运行结果:


image

Caption

  1. 多线程
    本段代码教你使用多线程模threading,定义了func(里面sleep两秒,比较耗时),你只需要修改功能函数即可用来做你的任务。对同一任务,用多线程和不用多线程进行了比较,应用速度会得到明显提升。
'''
想最快的入门Python吗?请搜索:"泉小朵",来学习Python最快入门教程。
也可以加入我们的Python学习Q群:902936549,看看前辈们是如何学习的。
'''
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))

运行结果:

image
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容