上一篇:python实战之paramiko模块 点击跳转
目录篇:python相关目录篇 点击跳转
下一篇:Python实战之线程点击跳转
同类篇:Python实战之协程 点击跳转
目录
首先须知
什么是IO?
从硬盘读块数据,从网络读块数据属于IO操作(IO操作不占用cpu(计算占用cpu,如:1+1))
Python多线程其实就是一个线程,由于利用CUP的上下文切换看起来就像是并发..上下文切换消耗资源
Python多线程 不适合CPU密集操作型的任务,适合IO操作密集型的任务
大量运算占CPU尽量少用多线程,用单进程更快
sockeserver接收多个网络并发的就是IO操作密集型的
如果一定要使用CPU密集操作型的任务呢?Python怎么解决?
使用多进程来解决CPU密集操作型的任务。
Python的线程是调用操作系统的原生线程,进程也是调用操作系统的原生进程,原生进程是由操作系统自己维护的。Python只是调用了C代码库的一个接口启动进程的,真正的进程管理还是操作系统自己完成的
进程processing
1.程序是不能单独运行的,只能装载到内存,系统为他分配资源进行运行,这种运行程序称之进程
2.进程同一时间只能干一件事,每个进程只能控制CPU一个核,由于多核同时可以多个进程,由于计算机的速度太快,1秒干了N件事,让我们看起来就等于同时干了N件事
3.进程要操作CUP必须创建一个线程,进程本身是不可以执行的,通过线程才可以进行操作CPU
4.得出结论,进程至少要有一个线程,否则就无法执行
多线程简单版
__author__ = "Burgess Zheng" import multiprocessing import time import threading def thread_run():#测试线程用的 print(threading.get_ident()) #threading.get_ident():显示线程号 def run(name): time.sleep(2) print("hello",name) t = threading.Thread(target=thread_run,)#实例化线程 t.start()#启动线程 #循环启动多个进程并发 if __name__ == '__main__': for i in range(10):#循环启动10进程 p = multiprocessing.Process(target=run,args=('bob%s'%i,)) p.start() #和线程格式一样的
执行结果: