python多线程
线程和进程:
什么是进程?
进程:有时被称为重量级级进程,是程序的一次执行。每个进程都有自己的地址空间、内存、数据栈以及记录运行轨迹的辅助数据,操作系统管理运行的所有进程,并为这些进程公平分配时间。进程可以通过fork和spawn操作完成其他任务。因为各个进程有自己的内存空间、数据栈等,所有只能使用进程间通信(IPC),而不能直接共享信息。
什么是线程 ?
线程:有时被称为轻量级进程,是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
多线程和多进程:
对于“多任务”这个词相信大家都不会第一次看见,现在的操作系统(如:Mac OS X、UNIX、Linux、Windows等)都支持“多任务”操作系统。
什么叫“多任务”呢?简单地说就是操作系统可以同时运行多个任务。比如,一边用浏览器上网,一边听音乐,一边聊天,这就是多任务。
对于操作系统来说,一个任务就是一个进程,开启多个任务就是多进程。有些进程不止可以同时做一件事,比如Word可以同时打字、拼写检查、打印等。在一个进程内部同时要做多件事情,就需要同时运行多个线程。多线程类似于同时运行多个不同的程序,多线程的好处有以下几点:
- 使用线程可以把占据长时间的程序中的任务放到后台去处理。
- 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
- 程序的运行速度可能加快
- 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
多线程:
Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装。再加上_thread不支持守护线程,当主线程退出时,子线程无论是否在工作,都会被强制退出。而threading带守护线程,绝大多数情况下,我们只需要使用threading这个高级模块。
import threadin