python学习-多线程、多进程
发布日期:2021-05-07 08:14:30 浏览次数:22 分类:精选文章

本文共 2207 字,大约阅读时间需要 7 分钟。

Python中的多线程和多进程是处理并行任务的两种主要方式,这两种机制在性能优化中扮演着重要角色。以下是对这两种技术的详细分析。

多线程

多线程是指在同一个进程内启动多个线程执行任务。与多进程相比,多线程在处理I/O密集型任务时更为高效,但其并行效果受到全局解释器锁(GIL)的限制,导致多线程执行实际上是交替式进行的。

多线程的适用场景

多线程适用于I/O密集型任务,如网络请求、文件读写等。由于线程可以更高效地轮询和等待I/O操作,因此在这些场景中,多线程可以显著提升性能。

Python中的多线程接口

Python提供了两种主要的多线程接口:

  • thread模块:提供基本的多线程接口,适合低层次操作。
  • threading模块:基于对象的接口,更易于使用,支持继承Thread类创建线程,同时提供Lock、RLock等同步机制。
  • 多线程示例

    以下是一个使用threading模块创建多线程的示例:

    import time
    import random
    from threading import Thread
    def download_file(name):
    print(f'开始下载{name}...')
    start_time = time.time()
    delay = random.randint(5, 10)
    time.sleep(delay)
    end_time = time.time()
    print(f'下载完成,耗时为:{end_time - start_time:.2f}秒')
    def main():
    start_time = time.time()
    file1 = 'Python从入门到实践'
    file2 = '深入浅出MySQL'
    t1 = Thread(target=download_file, args=(file1,))
    t2 = Thread(target=download_file, args=(file2,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    end_time = time.time()
    print(f'总计耗时:{end_time - start_time:.2f}秒')
    if __name__ == '__main__':
    main()

    多进程

    多进程是指在操作系统内创建多个独立的进程执行任务。由于每个进程占用独立的内存空间,多进程在处理计算密集型任务(如图形处理、音视频编解压)中表现优异,能够充分利用多核多CPU的优势。

    多进程的适用场景

    多进程适用于计算密集型任务和I/O密集型任务。对于前者,多进程可以更好地利用多核资源;对于后者,多进程可以提高I/O操作的吞吐量。

    Python中的多进程接口

    Python中的多进程支持通过multiprocessing模块实现。该模块提供了多种工具,包括Process、Queue、Pipe等,方便地在进程间进行通信和管理。

    多进程示例

    以下是一个使用多进程创建并行进程的示例:

    import random
    import time
    from multiprocessing import Process
    def upload_file(name):
    print(f'开始上传{name}')
    time.sleep(random.randint(3, 8))
    print(f'{name}上传完成')
    def download_file(name):
    print(f'开始下载{name}')
    time.sleep(random.randint(5, 10))
    print(f'{name}下载完成')
    def main():
    start_time = time.time()
    # 创建并启动进程
    p1 = Process(target=download_file, args=('Python网络爬虫开发',))
    p1.start()
    p2 = Process(target=download_file, args=('Python从入门到实践',))
    p2.start()
    p3 = Process(target=upload_file, args=('深入浅出MySQL',))
    p3.start()
    # 等待所有进程完成
    p1.join()
    p2.join()
    p3.join()
    end_time = time.time()
    print(f'总共耗时:{end_time - start_time:.3f}秒')
    if __name__ == '__main__':
    main()

    总结

    多线程和多进程是Python中处理并行任务的两种主要方式。多线程适用于I/O密集型任务,而多进程则更适合计算密集型任务。在实际应用中,根据任务的性质选择合适的并行模型可以显著提升性能。

    上一篇:Django开发车辆违章系统、模糊查询、分页查询
    下一篇:python学习-Django学习8、Session、登陆与注销、注册

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2025年04月18日 17时03分07秒