线程和进程一样,也是为了实现多任务而设计出来的。举个例子:打开微信,可以和多个人同时聊天,这就可以用多线程实现。既然进程和线程都可以实现多任务,为什么还要设计出这两种呢?(在这埋个伏笔)
python的threading模块提供了实现的线程的方法,在使用方法上和mutiprocessing很相似。
#coding=utf-8 import threading import time def do_thread(*args): print(args) time.sleep(1) if __name__ == '__main__': print('-------------main thread begin---------') for i in range(5): t = threading.Thread(target=do_thread,args=(i,)) t.start() print('-------------main thread over---------') 结果: -------------main thread begin--------- (0,) (1,) (2,) (3,) (4,)-------------main thread over---------上面的例子定义了函数do_thread(*args),主线程中创建了5个线程,具体的语法就是使用threading模块中的Thread类,并将do_thread和元组(i,)作为参数传进去。最后调用start()方法开始线程。分析代码可以看出如果是单线程的方式执行至少需要5秒的时间,采用上述的方法后很快就执行完了。
继承Thread类。基本的语法和进程差不多,其中self.name获取的当前线程的名字,也可以使用getName()方法获得。
#coding=utf-8 import threading import time class MyThread(threading.Thread): def run(self): time.sleep(1) print('thread name is:%s' % (self.name)) if __name__ == '__main__': print('-------------main thread begin---------') for i in range(5): t = MyThread() t.start() print('-------------main thread over---------') 结果: -------------main thread begin--------- -------------main thread over--------- thread name is:Thread-3thread name is:Thread-2 thread name is:Thread-4 thread name is:Thread-1thread name is:Thread-5以上两种实现线程的方式和进程很相似,和进程同样有join()等方法。
为什么要有进程和线程两种实现多任务的方式呢?借用操作系统的一句话:进程是操作系统分配资源的一种单位,线程是操作系统调度的基本单位。从进程和线程占用资源的角度理解,进程占用的资源比线程更多,一个进程可以创建出多个线程,这几个线程共享来自与当前进程的资源,这一点在多线程访问全局变量时格外明显。
总结:
无法控制线程调度程序,但可以通过别的方式来影响线程调度的方式,如sleep(),join()。
