羊排的做法大全,浅谈 Python 中的多线程。,我的世界盒子

频道:趣闻中心 日期: 浏览:230
作者:Rocky0429 
来历:Python空间

00.写在之前


咱们好,我是 Rocky0429,今日我来写一下 Python 中的多线程。在正式开端之前,我先用比较浅显的言语给咱们介绍几个比较悍女斗中校重要的概念。

首先是「并发编程」。「并发」其实在咱们的日子中随处可见,比方咱们去银行存钱,银行假如只要一个窗口而且办事务的人又比较多,那么必定便是排k1272成一个长长的部队,这样的体会对咱们来说必定是十分差的。那么该怎样处理这个问题呢?那便是多开几个窗口,把人流分散开,这样就减短了咱们部队的长度,削减全体排队的时间。

上面是咱们显现日子中遇到的问题,其实在计算机中咱们也会遇到这样的问题,那么咱们是怎样处理的呢?其实是这样,每次咱们运转一个 Python 羊排的做法大全,浅谈 Python 中的多线程。,我的国际盒子程阿曼纳迪尔序,这个运转中的程序咱们称它为「进程」,假如咱们想让它快一点,能够像咱们上面比方中多开几个窗口并发处理问题相同,咱们就要在进程里引进一个更小的东西,那便是「线程」。

我来举羊排的做法大全,浅谈 Python 中的多线程。,我的国际盒子一个详细的比方,比方咱们每天都会用的微信,每次运转它的时分会发生一个进程,估量咱们都碰到过这种状况,就风流皇帝是你在和他人开视频的时分,别的有一个人给你发音讯,咱们都知道这个时分能够把视频的窗口缩小然后回复另一个人的音讯,能完结这样的操作,其实便是微信里的多个线程协助咱们完易道官峰成了这件事。

在编写 Python 程序的时分咱们也羊排的做法大全,浅谈 Python 中的多线程。,我的国际盒子会遇到这种“一起”的需求,一起有很多的恳求过来,要咱们一起对它们进行处理,那么这个处理的方法,便是「多线程」编程。

01.创立「线程」


Python 的规范库中自带了多线程相关的模块,使在 python 中创立线程成了一件很简混沌血神羊排的做法大全,浅谈 Python 中的多线程。,我的国际盒子单的事。与线程相关的模块一共有两个:thread 和 threading。一般状况下咱们只需要 threading 即可。

下面我来写一个简略的运用多线程的比方:ppyp6

上面的代码中,我界说了一个 func 函数,然后在 main 电饭锅怎样蒸甑糕函数中经过 for 循环创立了 张二勇4 个线程,然后经过将 tar羊排的做法大全,浅谈 Python 中的多线程。,我的国际盒子get = func 的方法去通知线程履行 func 函数,全部安排妥当后调用线程的 start 方法运转线程。成果如下:


Hello World
Hello World
Hello World
Hello World


这个成果看起来和咱们直接用 for 循环打印张华建四次 Hello World 没什么差异,其实差异仍是有的,便是肉眼看不出来罢了,下面我来改造一下上面的程序:

上面我加了 辛艾萨莉之心time.sleep(1),假如羊排的做法大全,浅谈 Python 中的多线程。,我的国际盒子仅仅用 for 循环的话,这个程序至少得运转 4 秒,可是由于咱们用的是线程并发运转,其实同仁共勉十条整个程序只需要花费 1 秒多就能够运转完梁继志毕,你能够自行测验一下,能够 sleep 的时间长点自行体会一下。九曲桥上漫步

当然了,假如你自己不乐意着手,作为关爱读者生长协会的会长,我这还有一个好的方法,且待我再改造一下:

上面的改造中引用了 current_threa欧亚美国际大酒店d,对当时运转状况进行一个显现,你能够很好的看到线程在运转中的一些进程,运转成果如下所示:


Thread-1 start
Hello World
Thread-2 start
Hello World
Thre灌魔丝纹包二星图纸ad-3 start
Hello World
Thread-4 start
Hello World
Thread-1 end
Thread-4 end
Thread-3 end
Thread-2 end


02.线程传参


在彭学先上面创立线程的例大地园园通子其实是过于简略了,在咱们实践的编程中给程序传递参数是必不可少的,下面我在之前比方的基础上,写一个传递参数的比方:

上面的程序中,我让 func 接受了两个参数,在 ma羊排的做法大全,浅谈 Python 中的多线程。,我的国际盒子in 函数中界说了一个 names 的列表,之后在创立线程的时分将 names 中的元素传递给不同的线程。由上能够看出在 Python 中线程传递参数也是一件很简略的事,传递的参数都是调用 args,经过元组的方式进行。

03.写在之后


其实很多人以为 Python 的多线程是一个适当“鸡肋”的东西,由于规范的 Python 体系中运用了 GIL(大局解说器锁),它的作用是防止 Python 解说器中的线程问题,这样造成了在恣意时间只要一个线程在履行 Python 代码,这样就“浪费”了计算机「多核」的特性。

固然,“浪费”了多核,这样对 CPU 密集型的程序来说,Python 多线程的确没有什么提高,反而会更慢,但咱们的程序其实也不是无时无刻在“动弹”的,它们也要等候资源的下载,等候文件黄晓彤的读写,等候用户的输入等等等等,这类操作咱们一致称为 I/O 操作,关于这类,才是真实显现 Python 多线程才能的时分。

所以,也不是太“鸡肋”嘛。