python 다 중 프로 세 스 와 협동 하여 기록 데 이 터 를 사용 합 니 다.

수요 분석
일부 key 는 3 개의 txt 파일 에 기록 되 어 있 으 며,각각 txt 파일 은 30 만 줄 의 기록 이 있 습 니 다.
이 txt 파일 을 읽 고 key 가 데이터 창고 에 있 는 지 판단 해 야 합 니 다.(mysql
빈 기록 을 위해 로그 파일 에 기록 해 야 합 니 다!
임무 분업
1.다 중 프로 세 스 기술 을 사용 하여 모든 프로 세 스 가 txt 파일 을 읽 습 니 다.
2.협 정 기술 을 사용 하여 txt 파일 기록 을 대량으로 읽 습 니 다.예 를 들 어 2000 개의 기록 을 한꺼번에 읽 는 것 이다.
메모:파일 을 여 는 작업 은 한 프로 세 스에 서 파일 을 다시 여 는 것 이 좋 습 니 다.시스템 자원 낭 비 를 초래 할 수 있 습 니 다!
전체 코드

#!/usr/bin/env python3
# coding: utf-8
"""
            
"""

import os
import time
from gevent import monkey;monkey.patch_all()
from gevent.pool import Pool
from functools import partial
from multiprocessing import Process

COROUTINE_NUMBER = 2000 #      
pool = Pool(COROUTINE_NUMBER) #      

#       ,    
data_dict = {"1":"x1","3":"x3","5":"x5","7":"x7","9":"x9"}

class TestProgram(object): #     
 def __init__(self):
  self.BASE_DIR = os.path.dirname(os.path.abspath(__file__)) #      

 def write_log(self,number, content, colour='white', skip=False):
  """
        
  :param content:     
  :param colour:   
  :param skip:         
  :return:
  """
  #     
  colour_dict = {
   'red': 31, #   
   'green': 32, #   
   'yellow': 33, #   
   'blue': 34, #   
   'purple_red': 35, #    
   'bluish_blue': 36, #    
   'white': 37, #   
  }
  choice = colour_dict.get(colour) #     

  path = os.path.join(self.BASE_DIR, "output_%s.log" % number) #     
  with open(path, mode='a+', encoding='utf-8') as f:
   if skip is False: #         
    content = time.strftime('%Y-%m-%d %H:%M:%S') + ' ' + content

   info = "\033[1;{};1m{}\033[0m".format(choice, content)
   print(info)
   f.write(content + "
") def has_null(self, key, number): """ key :param key: :param number: :return: bool """ key = key.strip() if not data_dict.get(key): self.write_log(number," ,{} ".format(key),"red") return False print(key) return True def read_file(self, number): """ :param number: :return: """ file_name = os.path.join(self.BASE_DIR, "data", "%s.txt" % number) # print(file_name) self.write_log(number, " {}".format(file_name),"green") with open(file_name, encoding='utf-8') as f: # , 。 : pool.map(func,iterator) # partial # :has_null , pool.map(partial(self.has_null, number=number), f) self.write_log(number, " {} ".format(file_name),"green") return True def run(self, number): """ , key :param number: :return: """ startime = time.time() # # path = os.path.join(self.BASE_DIR, "output_%s.log" % number) # with open(path, mode='w') as f: pass self.read_file(number) endtime = time.time() take_time = endtime - startime if take_time < 1: # 1 take_time = 1 # 1 # m, s = divmod(take_time, 60) h, m = divmod(m, 60) self.write_log(number, "%s.txt %02d:%02d:%02d" % (number,h, m, s),"green") def main(self): """ :return: """ # file_list = ["7001", "7002", "7003"] p_lst = [] # for i in file_list: # self.run(i) p = Process(target=self.run, args=(i,)) # p.start() # p_lst.append(p) # for p in p_lst: p.join() # p , , TestProgram().main() # , 3 。
실행 출력

이상 은 python 다 중 프로 세 스 와 협 정 이 데 이 터 를 기록 하 는 상세 한 내용 입 니 다.python 다 중 프로 세 스 와 협 정 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기