python多线程学习一

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


1.png

2.png

  其中图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多线程还有很多用法呢,我只是发现了一点点,还需要慢慢学习,努力,加油

你可能感兴趣的:(python多线程学习一)