记录一个python单线程、多线程简单爬虫的执行效率
python多线程与其他语言相比有很大的区别,python中的多线程,由于cil锁的缘故,导致cpu同一时间只能执行一个线程,这样产生的问题就是别管你的cpu是几核的,都没什么卵用。但是这种情况是计算密集性才会有的问题,如果牵涉到的是计算密集性,那么python可以通过多线程来做这种操作,这样就解决了多核缺并不能提高效率的问题。
python多线程与其他语言相比有很大的区别,python中的多线程,由于cil锁的缘故,导致cpu同一时间只能执行一个线程,这样产生的问题就是别管你的cpu是几核的,都没什么卵用。但是这种情况是计算密集性才会有的问题,如果牵涉到的是计算密集性,那么python可以通过多线程来做这种操作,这样就解决了多核缺并不能提高效率的问题。
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体
这我们来一起做一个简单的ftp系统,功能要求如下:
socketserver实现多客户端与服务端交互就是用到了多线程,python也帮我们提供了多线程模块**threading,**我们可以定义一个函数接收两个参数,一个与客户端的连接句柄,一个是客户端地址,函数内部执行与客户端的具体交互;外部使用socket正常逻辑,执行到accept时开启一个包含上述函数的线程,就是这么简单
之前用单用户ftp上传,服务器同时只能处理一个客户端的连接,要做到多客户端连接可以直接使用python帮我们封装好的socketserver模块。以下代码为多用户ftp上传示例,里面用到md5文件一致性校验,在一个win机器上同时扮演客户端和服务器没问题,但是当有一方使用了linux就出现问题了。运行代码测试发现;同样的文件内容,在win和linux是进行md5加密内容发现执行的结果不一样。没测试在两台win上是否一样,有其他人看到可以自己测试下。