美文网首页
python进线程——多进程与多线程对比与介绍

python进线程——多进程与多线程对比与介绍

作者: TheRightPath1 | 来源:发表于2020-03-01 16:50 被阅读0次

1. 多进程与多线程的区别

进程与线程的区别在于二者的耗费CPU与耗费内存的资源不同,对于耗费CPU的比较多的操作使用多进程编程.对于IO操作比较密集的情况要使用多线程编程.因为进程切换的代价要高于线程.
*注意: 在windows中使用多进程变编程的时候, 代码一定要写在if name=='main'中

2. 多进程编程

(1) 进程类: 进程使用multiprocessing包中的Process,他的使用方法与Thread基本相同
(2)进程池: 进程池使用multiprocessing包中的Pool类, 它的第一个参数表示进程池中的线程数量,如果不指定参数会默认为CPU核数大小的进程数, 也可以通过multiprocessing.cpu_count()获取CPU的核心数

代码示例

import time
import multiprocessing


def test(seconds):
    time.sleep(seconds)
    print('sleep {} 秒'.format(seconds))
    return seconds


if __name__ == '__main__':
    pool = multiprocessing.Pool(multiprocessing.cpu_count())
    # 使用apply_async方法往进程池中添加进程
    result = pool.apply_async(func=test, args=(1,))
    # 必须先将进程池close掉才能join
    pool.close()
    # 等待进程池中的进程运行完成
    pool.join()
    # 使用get方法获取运行结果
    print(result.get())
    # imap方法类似于map方法,会将列表中的每个元素作为函数的参数加入到池中运行,并且返回结果顺序与列表中元素顺序相同
    for res in pool.imap(test, [1, 3, 5]):
        print(res)
    # imap_unordered方法与imap方法基本相同,但返回结果的顺序为先执行完先返回
    for res in pool.imap_unordered(test, [1, 3, 5]):
        print(res)

相关文章

网友评论

      本文标题:python进线程——多进程与多线程对比与介绍

      本文链接:https://www.haomeiwen.com/subject/wzblhhtx.html