python多线程学习一
2019-03-24 本文已影响0人
井湾村夫
最近在使用python造测试数据,大体就是请求网络后,解析返回的数据并写入本地文件。小数据是没有问题,可是当遇到需要造大量的数据时,问题就来了,单线程等待的时间是太久了。完全有种充电两小时,通话两分钟的感觉。后来想到了python多线程,也就试着研究了一下,有人说,python的多线程是假的,其实这样说是不对的。经过我的实验,发现python多线程可以适用到I/O密集型(网络请求等)。下面开始大体说一下,先看图的效果:


其中图1是单线程造40个数据所用的时间,图2是开启10个线程也造40个数据所用的时间,耗时差距是3倍还多一点,是不是感觉python多线程其实还是挺有用的,哈哈。
1.from threading import Thread #导入threading包
2.#重写threading类的run方法
class myThread(Thread):
def __init__(self):
Thread.__init__(self)
# self.threadID = threadID
# self.name = name
# self.counter = counter
def run(self):
#print("开始线程:" + self.name)
save_token(4) #其实也就是把需要应用多线程的函数,放到run方法中
#print("退出线程:" + self.name)
3. #初始化类
t = myThread()
4. #开始子线程
t.start()
5. #等待至线程中止
t.join()
以下是全部的例子:
from threading import Thread
import random
import time
#重写run方法
class myThread(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
write_files()
#写入文件,每次等待1秒
def write_files():
time.sleep(1)
ran_int = str(random.randint(100,10000))
with open('/Users/mengyanjing/Desktop/test','a') as pf:
pf.write(ran_int+'\n')
#创建50个线程
def thread_func():
thread_list = []
for i in range(50):
#多线程的另一种创建方法
# t = Thread(target=write_files, args=())
t = myThread()
t.start()
thread_list.append(t)
for t in thread_list:
t.join()
#不使用多线程的函数
def sample_func():
for i in range(50):
write_files()
if __name__ == '__main__':
start_time = time.time()
thread_func()
#sample_func()
end_time = time.time()
print(end_time-start_time)
也就这5步,基本就可以实现python多线程了,是不是可简单呢?其实python多线程还有很多用法呢,我只是发现了一点点,还需要慢慢学习,努力,加油