Python 多线程与多进程
一、线程
一个线程就是一堆指令集合
分为:IO密集型任务或函数/计算密集型任务或函数
例子1 IO密集型任务或函数
1 #__author: Lobin 2 #__date: 2018/1/21 3 import os 4 import time 5 import threading 6 def foo(n): 7 print('foo%s'%n) 8 time.sleep(1) 9 print('end foo') 10 def bar(n): 11 print('bar%s'%n) 12 time.sleep(2) 13 print('end bar') 14 thread1=threading.Thread(target=foo,args=(1,)) 15 thread2=threading.Thread(target=bar,args=(2,)) 16 thread1.start() 17 thread2.start() 18 thread1.join() 19 thread2.join() 20 print('..........main threading..........')
解析:
1.1 thread1=threading.Thread(target=foo,args=(1,))使用threading模块中的Thread创建类实例,参数target指向需要执行的任务/函数,args指向任务/函数的参数
1.2 thread1.start() 开启线程,执行任务/函数
1.3 thread1.join() 阻塞子线程的执行,等待子线程完成会到主线程
例子2 计算密集型任务或函数
1 #__author: Lobin 2 #__date: 2018/1/21 3 import threading 4 import time 5 begin=time.time() 6 def add(n): 7 sum=0 8 for i in range(n): 9 sum+=i 10 print(sum) 11 th1=threading.Thread(target=add,args=(10000000,)) 12 th2=threading.Thread(target=add,args=(10000000,)) 13 th1.start() 14 th2.start() 15 th1.join() 16 th2.join() 17 # add(10000000) 18 # add(10000000) 19 end=time.time() 20 print(end-begin)
利用py2.7则多线程消耗时间更多
总结:如果是IO密集型的可以使用多线程
如果是CPU计算密集型的可以改C
二、函数
1.join方法的作用是阻塞,等待子线程结束,join方法有一个参数是timeout,即如果主线程等待timeout,子线程还没有结束,则主线程强制结束子线程。
2.GIL(Global Interpreter Lock,全局解释器锁),同一时刻只能有一个线程在CPU中执行
3.线程共享创建他们的进程的内存空间以及资源,进程间不能共享内存空间以及资源
4.默认当主线程结束时如果子线程没有结束,则需要等待子线程结束
5.守护线程setDaemon(True)默认当主线程结束时,不等待子线程结束直接退出。如果你设置一个线程为守护线程,
就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。
整个Python会在所有的非守护线程退出后才会结束,即进程中没有非守护线程存在的时候才结束。
6.threading.current_thread() 当前的线程
7.threading.active_count() 当前激活的线程数量
浙公网安备 33010602011771号