python---线程与进程
1、进程与线程
进程:进程是并行,系统进行资源分配的最小单位,进程拥有自己的内存空间,所以进程间资源不共享,开销大。同一进程中所有线程共享资源
线程:线程是并发,调度执行的最小单位,也叫执行路径,依赖进程的存在而存在,一个进程至少有一个线程,叫主线程。多个线程共享内存(数据共享和全局变量),提升程序的运行效率
2、多进程与多线程的应用
多进程:适合cpu密集型(cpu操作指令比较多,如科学计算,位数多的浮点运算)
多线程:适合IO密集型(读写操作较多的)
python内的多进程是真的利用多个cpu的,而多线程是伪并发(因为python里有全局锁)
3、线程调用方式
import threading import time def delay_1(second): print('延迟前') time.sleep(second) print('延迟{0}s后'.format(second)) delay_1(3) delay_1(2) print('下面是线程----------') t = threading.Thread(target=delay_1,args=(3,)) #target=delay_1,后面跟的是函数名,而不是函数调用,args=(3,)传入的参数 t.start() #启动线程 t2 = threading.Thread(target=delay_1,args=(2,)) t2.start() 控制台输出: #由输出结果可以看出python是从上而下执行的 延迟前 延迟3s后 延迟前 延迟2s后 下面是线程---------- 延迟前 #由输出可知t和t1是一起执行的 延迟前 延迟2s后 延迟3s后
4、进程调用方式:
import threading import time from multiprocessing import Process def delay_1(second): print('延迟前') time.sleep(second) print('延迟{0}s后'.format(second)) delay_1(3) delay_1(2) print('下面是进程----------') p1 =Process(target=delay_1,args=(3,)) p1.start() p1 =Process(target=delay_1,args=(2,)) p1.start() 控制台:报错is not going to be frozen to produce an executable.
解决办法,进程应该在main函数中运行
import threading import time from multiprocessing import Process def delay_1(second): print('延迟前') time.sleep(second) print('延迟{0}s后'.format(second)) if __name__ == '__main__': p1 = Process(target=delay_1, args=(3,)) p1.start() p1 = Process(target=delay_1, args=(2,)) p1.start()
5、参考博文:https://blog.csdn.net/liangkaiping0525/article/details/82313034