Python(十) —— 多进程多线程

进程线程概念

进程理解为一个程序,具体完成工作的是线程。比如说启动一个 QQ ,QQ 程序里面可以聊天,设置,查找好友等,那么这些功能就理解成各个线程,也就是单进程多线程的一个模式。进程理解成人脑子,线程理解成人的手,只有脑子是无法完成工作,必须要有手。所以启动进程下面一定是有一个线程,可以理解成主线程。

那么一个计算机的最大并发进程数是多少呢?我这里说的并发是指的是真正的并发,并发数就等于电脑的核心数,比如说电脑的 CPU 核心数为 8 个,那么就是最大能并发 8 个进程。

多线程——threading

比如我们 pycharm ,运行一个 .py 文件,实际上就是运行一个程序,这个程序就是个进程,但是进程内是线程在运行结果。那么我们的进程默认下只有 1 个线程,怎么增加单进程下的线程数呢?需要引用到模块 —— threading ,比如说启动 10 个线程来帮我们执行一个程序 10 次:

import threading
import time

def eat():
    time.sleep(1)  
    print('吃饭')

start_time = time.time()
for i in range(10):
    t = threading.Thread(target=eat) #实例化了一个线程,这里面不要写成 eat() ,写成 eat() 就不是多线程了
    t.start()#运行这个线程
end_time = time.time()
print('运行的时间',end_time - start_time)

结果:
运行的时间 0.002976655960083008
吃饭吃饭

吃饭吃饭

吃饭吃饭

吃饭
吃饭
吃饭
吃饭

上边的程序,我们循环创建出了 10 个线程,10 个线程去执行这个 eat() 方法,且 eat() 方法内,写了一个延时,按照理解来讲,程序的运行时间应该为 1s 左右(因为多线程理解成广义并发执行 10 次 eat()),但是结果却是:运行时间连 1s 都不到,这是为什么呢?另外,运行结果运行时间是在 eat() 方法之前打印出来的,但是程序内我们的运行时间是在最后打印,按理解程序应该从上至下执行,为什么会出现该情况呢?

其实,我们这里要好好理解一下,刚刚我们的进程下是有几个线程?

答案应该是 1+10 = 11 个,另外的那个进程其实是执行除 10 个线程之外的 1 个主线程,这 11 个线程是并行执行,而打印开始和结束时间是在那 1 个主线程之内的,线程之间现在是没有互相等待,

多进程

 

猜你喜欢

转载自www.cnblogs.com/xiaowenshu/p/10962167.html
今日推荐