Python 多线程与多进程

        最近在使用聚类(cluster)时,发现16核的机器只有一个核使用率达到了100%。因此考虑将工作并行进行,这就涉及了之前一直想了解但一直没有了解的多线程,也借此机会了解一下二者的区别以及应用。

        首先明确进程和线程的区别。通常来讲,一个程序的执行便是一个进程,一个进程至少拥有一个线程,这个线程也称为主线程。同时,一个进程中可以采用多线程的方式对程序并行执行,多个线程共享内存空间,也就是说,对于同一进程内的多个线程来说,对于程序中的变量修改是有着相同权限的,这就容易导致由于线程调用引起的结果不准确。为了防止这种情况的出现,我们就有了“锁”的概念。只有获取到“锁”的线程拥有执行的权利,这样就保证了内存修改的顺序不变。

         除此之外,还可以用多进程的方式完成并行。多个进程之间是相互隔离的,各自有着独立的内存空间,因此较为安全。同样的,调用进程也比调用线程所需的代价大一点,这方面可以根据程序对于数据安全的要求与运行时间、空间的要求自行决定。

        再回到Python,python中存在一个独特的机制保证多线程间的数据安全,这个机制称为全局解释器锁(Global Interpreter Lock,GIL),这也是上文提到的“锁”的一种,这个机制保证了,不管进程中有多少个线程,只有拿到了GIL的线程才可以运行,即同一时刻,只会有一个线程在执行。因此,python中的多线程,在GIL的存在下,大部分时间还是以单线程运行的。那么python就不能实现并行了吗?答案显然是可以的,就是上文提到的多进程。Python中的并行运算,大部分为多进程运算,这也可以保证在多核CPU中实现性能最大利用。

        在使用时,一般的库已经提供了并行的运行方式,例如聚类中的n_jobs参数,可以设定你希望使用的CPU核数,实现并行。除此之外,还可以使用Parallel库实现python的并行,这里就不再展开了。

 


参考资料:

https://www.runoob.com/python3/python3-multithreading.html

https://www.cnblogs.com/yssjun/p/11302500.html

https://blog.csdn.net/weixin_42280274/article/details/107316807

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值