python干货|多线程和多进程
多进程与多线程概念
所谓进程,你可以简单的理解为一个可执行程序,一个没有调用多进程的可执行程序就是单个进程,如果这个可执行程序通过代码又启动了其他进程,那它就是多进程。你也可以打开windows下的任务管理器页面,如下图所示,一个图标就代表了一个进程。
这是比较直观的理解。而对于系统而言,也是专业的解释:进程是系统分配和调度资源的基本单位。所有的程序运行都需要内存空间,根据实际情况,它可能还会需要其他资源如打印机、显示窗口等。所有这些计算机系统资源和外设资源都统称为这里的资源。而进程就是系统分配和调度这些资源的基本单位。那么比进程更小的单位就是线程了。一个进程下可以有多个进程。那么,这时候,这多个线程一般会共享所属进程被分配到的资源。因此说,进程是系统分配和调度这些资源的基本单位。
而线程就是一个进程的实际执行过程,你可以简单的理解为就是进程的指令部分(不包含数据部分)。专业解释是线程是系统独立调度和分派的基本单位,这里要注意:这和上面所说的进程的专业解释是有区别的,具体区别下面介绍。
如果,这个进程同时启用两个程序,这两个程序的执行过程是允许同时进行的,那么这就是多线程了。专业的解释是
那么,什么是多进程呢?顾名思义就是多个进程同时运行。实际操作中,我们一般可以通过某个语言提供的系统调用方法启用新的进程,也可以通过该语言本身特有的方法启用新进程。在下面,我们就将通过multiprocessing启用新进程。
多进程与多线程区别
(灵魂画手幼稚鬼上线!)
多进程:
多线程:
验证哥德巴赫猜想
猜想提出
1742年6月7日,哥德巴赫写信给欧拉,提出了著名的哥德巴赫猜想:随便取某一个奇数,比如77,可以把它写成三个素数之和,即77=53+17+7;再任取一个奇数,比如461,可以表示成461=449+7+5,也是三个素数之和,461还可以写成257+199+5,仍然是三个素数之和。例子多了,即发现“任何大于5的奇数都是三个素数之和。”
1742年6月30日欧拉给哥德巴赫回信。这个命题看来是正确的,但是他也给不出严格的证明。同时欧拉又提出了另一个命题:任何一个大于2的偶数都是两个素数之和。但是这个命题他也没能给予证明。
用python多线程来验证:(手贱敲得数字大了点……这个时间我也是醉了……)
代码:
组件(部分)
(1)Process
创建进程的类:Process([group [, target [, name [, args [, kwargs]]]]]),target表示调用对象,args表示调用对象的位置参数元组。kwargs表示调用对象的字典。name为别名。group实质上不使用。
方法:is_alive()、join([timeout])、run()、start()、terminate()。其中,Process以start()启动某个进程。
属性:authkey、daemon(要通过start()设置)、exitcode(进程在运行时为None、如果为–N,表示被信号N结束)、name、pid。其中daemon是父进程终止后自动终止,且自己不能产生新进程,必须在start()之前设置。
创建函数并将其作为多个进程:
结果:
(2)Lock
当多个进程需要访问共享资源的时候,Lock可以用来避免访问的冲突。
结果:
(3)Semaphore
Semaphore用来控制对共享资源的访问数量,例如池的最大连接数。
结果:
(4)Event
Event用来实现进程间同步通信。
结果:
(5)Queue
Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递。put方法用以插入数据到队列中,put方法还有两个可选参数:blocked和timeout。如果blocked为True(默认值),并且timeout为正值,该方法会阻塞timeout指定的时间,直到该队列有剩余的空间。如果超时,会抛出Queue.Full异常。如果blocked为False,但该Queue已满,会立即抛出Queue.Full异常。
get方法可以从队列读取并且删除一个元素。同样,get方法有两个可选参数:blocked和timeout。如果blocked为True(默认值),并且timeout为正值,那么在等待时间内没有取到任何元素,会抛出Queue.Empty异常。如果blocked为False,有两种情况存在,如果Queue有一个值可用,则立即返回该值,否则,如果队列为空,则立即抛出Queue.Empty异常。Queue的一段示例代码:
结果:
多线程爬虫案例(300多行代码,幼稚鬼,卒……)
综合案例:
1、将前面的网页爬虫数据保存到MongoDB数据库
2、使用多进程(使用生产者消费者模型)
最后
前几天有私信小编要Python的学习资料,小编整理了一些有深度的Python教程和参考资料,从入门到高级的都有,文件已经打包好了,正在学习Python的同学可以下载学习学习。文件下载方式:点击小编头像,关注后私信回复“资料”即可下载。首先把代码撸起来!首先把代码撸起来!首先把代码撸起来!重要的事说三遍,哈哈。“编程是门手艺活”。什么意思?得练啊。