python多线程、多进程(一)

同一个时刻,某个线程只能干同一件事,但在一段时间内,可以有很多线程干很多事。

并行指同一个cpu在一段时间内雨露均沾地执行程序

并行指多个cpu干不同的事情。

进程就是一个执行的程序,进程和进程之间相隔,没有关系

进程

举个多进程的例子:
下面的代码是计算两次睡眠的耗时

import time
import random
def fun():
    time.sleep(random.randint(1,3))
if __name__ == '__main__':
    s_time=time.time()
    fun()
    fun()
    e_time=time.time()
    print(e_time-s_time)

结果:
在这里插入图片描述
建立进程后:

import time
from multiprocessing import Process
def fun():
    time.sleep(3)
if __name__ == '__main__':
    s_time=time.time()
    p1 = Process(target=fun)#target 指定任务(注意fun没有括号),创建子进程
    p1.start()
    fun()
    e_time=time.time()
    print(e_time-s_time)

结果:
在这里插入图片描述
原因是两个fun函数分开执行了,可能是并行也可能是并发。如果进程少于cpu时,系统选择并行。

再举个例子:

import time
from multiprocessing import Process
def fun1(a,b):
    time.sleep(2)
    res=a+b
    print(res)
if __name__ == '__main__':
    s_time=time.time()
    p1 = Process(target=fun1,args=(2,2))
    p1.start()
    fun1(1,1)
    e_time=time.time()
    print(e_time-s_time)

结果:
在这里插入图片描述
可以看出两个fun1是同时出结果的。

线程

操作系统不会直接操作线程,它是由python解释器来调度的,而且多线程不能并行,因为GIL锁,和Java类似,是为了保证线程安全。

举个例子:

from threading import Thread
import time
def fun():
    print("任务开始了")
    time.sleep(2)
if __name__ == "__main__":
    s_time=time.time()
    t1=Thread(target=fun)
    t1.start()
    fun()
    e_time=time.time()
    print(e_time-s_time)

结果:
在这里插入图片描述
可以看出两个fun并发执行

在任意一个进程里,只能执行一个线程。这个道理很明显,因为一个cpu只能执行一个进程,每时每刻只有一个线程在运行,但是cpu可以雨露均沾。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值