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

原文地址:https://www.cnblogs.com/hzgq/p/11771336.html