python3多线程处理文件

问题

现在需要对某个文本中的每一条进行处理,例如:对每一行进行同样的操作,现在采用多线程进行,而不是一条一条读取、执行
在这里插入图片描述

解决

#! /usr/bin/env python
# encoding:utf-8
# Software:PyCharm
# Time:2023/10/07 14:30
# Author:sec0nd

import threading
import time
import queue

def readFile():
    file_object = open('1.txt')
    global queue
    for line in file_object:
        queue.put(line)
        
class Consumer(threading.Thread):
    def run(self):
        global queue
        while queue.qsize() > 0:
            msg = self.name + '消费了 ' + queue.get()
            print(msg)
            time.sleep(0.01)

queue = queue.Queue()
def main():
    readFile()
    for i in range(5):
        c = Consumer()
        c.start()

if __name__ == '__main__':
    main()

open(‘1.txt’) 这里是要执行操作的文本文件

for i in range(5) 这里的5是指5个线程

run()里面是要执行的操作,这里以输出为例

执行结果:
在这里插入图片描述

代码解释:

首先,我们导入了Python标准库中的threading、time和queue模块。threading模块提供了与线程相关的类和函数,time模块用于处理时间,queue模块用于创建和管理队列。

接下来,我们定义了一个名为readFile的函数,该函数用于读取文件中的数据并将其放入一个名为queue的队列中。在readFile函数中,我们使用了一个全局变量queue来管理队列。

接着,我们定义了一个名为Consumer的类,该类继承自threading.Thread类。Consumer类用于消费queue中的数据。run方法用于消费queue中的元素,并在每次消费时打印一条消息,并暂停0.01秒。

最后,我们定义了一个名为main的方法,该方法首先调用readFile函数将文件数据放入queue中,然后使用for循环创建了5个Consumer线程来消费queue中的元素。每个Consumer线程都会执行run方法,并在每次消费时打印一条消息。

当所有线程都完成后,程序结束。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Python 的 `threading` 模块来实现多线程遍历和处理文件。 首先,需要将文件遍历的任务分解成多个子任务,然后将这些子任务分配给不同的线程来执行。可以使用 Python 的 `Queue` 来实现任务队列,每个子任务就是一个文件名,可以将文件名压入任务队列中。 接下来,创建多个线程,每个线程从任务队列中取出一个任务,处理完后再取下一个任务,直到任务队列为空。可以使用 Python 的 `threading` 模块来创建线程,将任务队列作为参数传递给线程函数。 下面是一个简单的示例代码: ```python import os import threading from queue import Queue # 定义线程数 THREAD_COUNT = 4 # 定义任务队列 task_queue = Queue() # 定义线程函数 def process_file(): while True: # 从队列中取出一个任务 file_name = task_queue.get() if file_name is None: # 如果任务队列为空,线程退出 break # 处理文件 with open(file_name, 'r') as f: # TODO: 处理文件内容 pass # 标记任务完成 task_queue.task_done() # 遍历文件目录,将文件名压入任务队列 def walk_dir(dir_path): for root, dirs, files in os.walk(dir_path): for file_name in files: task_queue.put(os.path.join(root, file_name)) if __name__ == '__main__': # 创建线程 threads = [] for i in range(THREAD_COUNT): thread = threading.Thread(target=process_file) threads.append(thread) thread.start() # 遍历文件目录,将文件名压入任务队列 walk_dir('/path/to/your/directory') # 等待任务队列中所有任务完成 task_queue.join() # 停止线程 for i in range(THREAD_COUNT): task_queue.put(None) for thread in threads: thread.join() ``` 在上面的示例代码中,首先定义了线程数和任务队列。然后定义了线程函数 `process_file`,该函数从任务队列中取出一个任务(即文件名),处理文件内容,然后标记任务完成。接下来,遍历文件目录,将文件名压入任务队列中。然后创建多个线程,每个线程从任务队列中取出一个任务,处理完后再取下一个任务,直到任务队列为空。最后,等待任务队列中所有任务完成,停止线程。 需要注意的是,在多线程处理文件时,需要考虑文件的并发读写问题。可以使用 Python 的 `with open(file_name, 'r') as f:` 语句来打开文件,这样可以确保文件在使用完毕后会被自动关闭。另外,如果需要对文件进行写操作,可以使用 Python 的 `with open(file_name, 'w') as f:` 语句,并且在写操作时需要使用线程锁来确保文件的独占性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值