python是支持多线程的,并且是native的线程。主要是通过thread和threading这两个模块来实现的
多线程类似于同时执行多个不同程序,多线程运行有如下优点:
- 使用线程可以把占据长时间的程序中的任务放到后台去处理。
- 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
- 程序的运行速度可能加快
- 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
- 线程可以被抢占(中断)
- 在其他线程正在运行时,线程可以暂时搁置(也称为睡眠) -- 这就是线程的退让。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
每个线程都有他自己的一组CPU寄存器,称为线程的上下文,该上下文反映了线程上次运行该线程的CPU寄存器的状态。
指令指针和堆栈指针寄存器是线程上下文中两个最重要的寄存器,线程总是在进程得到上下文中运行的,这些地址都用于标志拥有线程的进程地址空间中的内存。
python使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里。
一:函数式:
调用threading模块如下:
threading.thread()
参考:http://www.w3cschool.cc/python/python-multithreading.html
举例:
#!/usr/bin/env python
import subprocess
import threading
def thread_1():
print 'This is multhread'
subprocess.call(['ping','-c 5','test1.com'])
def thread_2():
print 'Ping test2'
subprocess.call('ping -c 5 test2.com',shell=True)
def main():
t1 = threading.Thread(target = thread_1)
t2 = threading.Thread(target = thread_2)
t2.start()
print 'thread2 start'
t1.start()
print 'thread1 start'
t1.join()
t2.join()
if __name__ == "__main__":
main()
参考:http://www.pythonclub.org/python-basic/threading