python3 线程、进程

线程、进程
python由于有全局解释锁(GIL)的原因,Python 的线程被限制到同一时刻只允许一个线程执行这样一个执行,所以妨碍了其真正的使用功效,但是对于IO型程序并没有多少影响,后续说解决办法

线程(对于IO密集型程序可以大幅提高程序运行速度,减少执行时间)

python3 目前推荐使用threading

import time

start = time.time()

def look_thread(name):
for i in range(5):
time.sleep(0.5)
print(‘主程序{}运行’.format(name))

look_thread(‘1’)
look_thread(‘2’)
end = time.time()
print(end-start)

这个是无线程运行后输出的结果以及所花费的时间

主程序1运行
主程序1运行
主程序1运行
主程序1运行
主程序1运行
主程序2运行
主程序2运行
主程序2运行
主程序2运行
主程序2运行
5.005494832992554

接下来看看使用线程后的程序

import threading
import time
from threading import Thread

start = time.time()
def look_thread(name):
for i in range(5):
time.sleep(0.5)
# print(‘主程序{}运行’.format(name))
print(“线程{}正在运行”.format(name))

t1 = Thread(target=look_thread,args=(‘1’,)) #创建线程1
t2 = Thread(target=look_thread,args=(‘2’,)) #创建线程2
#t1 = Thread(target=look_thread,args=(‘1’,),daemon=True) #如果不喜欢使用join可以使用保护线程
#t2 = Thread(target=look_thread,args=(‘2’,),daemon=True) #创建线程2
t1.start() #启动线程1
t2.start() #启动线程2
print(threading.active_count()) #现存线程数
t1.join() #将线程1加入到当前线程
t2.join() #将线程2加入到当前线程
print(threading.active_count()) #现存线程数
end = time.time()
print(end-start) #运行时间

结果如下

线程1正在运行
线程2正在运行
线程1正在运行
线程2正在运行
线程1正在运行
线程2正在运行
线程1正在运行
线程2正在运行
线程1正在运行
线程2正在运行
2.504371404647827

2个对比可以看出,明显不是按照持续执行,且线程数的变化和运行时间的减半

进程(建议在cpu密集型程序使用)

python3 使用multiprocessing,使用方法同threading

import time
from multiprocessing import Process
start = time.time()
def look_thread(name):
for i in range(5):
time.sleep(0.5)
# print(‘主程序{}运行’.format(name))
print(“进程{}正在运行”.format(name))
if name == “main”:
t1 = Process(target=look_thread,args=(‘1’,))
t2 = Process(target=look_thread,args=(‘2’,))
t1.start()
t2.start()
t1.join()
t2.join()
end = time.time()
print(end-start)

结果如下

进程1正在运行
进程2正在运行
进程2正在运行进程1正在运行

进程1正在运行
进程2正在运行
进程1正在运行进程2正在运行

进程2正在运行
进程1正在运行
2.7984180450439453

原文:https://www.cnblogs.com/jay-col/archive/2019/06/12/11008836.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值