面对密集型的I/O任务处理,python该如何提高执行效率

密集型的I/O任务最常见的就是经常需要轮询去读取或下载数据文件,并且I/O的密集程度是相当高的。

若是碰到类似这样的业务处理,单线程的串行处理效率无疑是比较低的,这个时候首先应该想到的就是多线程的方式的来解决问题。

这里就通过python内置的多线程来解决一个读取批量数据文件内容的业务场景,我相信这样的场景肯定也是大家在开发商过程中经常遇到的,话不多说,直接开干。

import threadingpython

1、创建基础函数

首先,开发一个数据文件的读取函数,用来专门读取文件数据内容。

def read_file_data(n=0):
    '''
    读取txt文件
    :param n:
    :return:
    '''
    with open('数据_{}.txt'.format(n), encoding='utf-8') as file:
        content = file.read()  # 读取文件内容
        print(content.rstrip())  # 删除末尾空行

接着,开发一个数据文件的写入函数,专门向文件中写入内容。

def write_file_data(n=0, content='文件内容'):
    '''
    写入txt文件
    :param n:
    :param content:
    :return:
    '''
    with open('数据_{}.txt'.format(n), 'a') as file:
        file.write(content + '\n')
        print('{}内容已写入!'.format(content))

2、创建多线程

初始化文件读取及文件内容写入多线程的存储数组,分别为read_threads和write_threads。

read_threads = []

write_threads = []

初始化文件读取线程并绑定线程执行的文件读取函数,将初始化完成的线程存储到read_threads线程数组中。

for n in range(1, 5):
    t = threading.Thread(target=read_file_data, args=(n,))
    t.setDaemon(True)
    read_threads.append(t)

初始化文件写入线程并绑定线程执行的文件写入函数,将初始化完成的线程存储到write_threads线程数组中。

for n in range(1, 3):
    t = threading.Thread(target=write_file_data, args=(n, 'Python is Good !',))
    t.setDaemon(True)
    write_threads.append(t)

分别启动read_threads、write_threads数组中存储的文件读取以及文件写入的多线程任务,并加入线程等待。

for t in read_threads:
    t.start()

for t in read_threads:
    t.join()

for t in write_threads:
    t.start()

for t in write_threads:
    t.join()

上面在过程中,做数据读取时调用了4个txt的数据文件,写入时则调用了2个txt数据文件,启动后整个过程基本都是瞬间完成。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python 集中营

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值