ホームページ  >  記事  >  バックエンド開発  >  大容量ファイルを分割してマルチスレッド処理を実現するPythonシミュレーション方法

大容量ファイルを分割してマルチスレッド処理を実現するPythonシミュレーション方法

黄舟
黄舟オリジナル
2018-05-26 10:10:383107ブラウズ

この記事では主に、Python ファイルの読み込み、分割、マルチスレッド関連の操作スキルを含む、大きなファイルのシミュレート分割とマルチスレッド処理を実装するための Python の方法を紹介します。

この記事の例。大きなファイルとマルチスレッドを処理するための Python メソッドでのシミュレートされた分割の実装について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

#!/usr/bin/env python
#--*-- coding:utf-8 --*--
from random import randint
from time import ctime
from time import sleep
import queue
import threading
class MyTask(object):
  """具体的任务类"""
  def __init__(self, name):
    self.name = name
    self._work_time = randint(1, 5)
  def work(self):
    print("Task %s is start : %s, sleep time= %d" % (self.name, ctime(), self._work_time))
    sleep(self._work_time)
    print("Task %s is end : %s" % (self.name, ctime()))
class MyThread(threading.Thread):
  """多线程的类"""
  def __init__(self, my_queue):
    self.my_queue = my_queue
    super(MyThread, self).__init__()
  def run(self):
    while True:
      if self.my_queue.qsize() > 0:
        self.my_queue.get().work()
      else:
        break
def print_split_line(num=30):
  print("*" * num)
if __name__ == "__main__":
  print_split_line()
  import my_read_file
  # 分割文件
  sf = my_read_file.SplitFiles(r"F:\multiple_thread_read_file.txt", line_count=300)
  file_num = sf.split_file()
  queue_length = file_num
  my_queue = queue.LifoQueue(queue_length)
  threads = []
  for i in range(queue_length):
    file_name = sf.get_part_file_name(i)
    mt = MyTask(file_name)
    my_queue.put_nowait(mt)
  for i in range(queue_length):
    mtd = MyThread(my_queue)
    threads.append(mtd)
  for i in range(queue_length):
    threads[i].start()
  for i in range(queue_length):
    threads[i].join()
  print_split_line()

以上が大容量ファイルを分割してマルチスレッド処理を実現するPythonシミュレーション方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。