python 다 중 프로 세 스 와 협동 하여 기록 데 이 터 를 사용 합 니 다.
4675 단어 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 다 중 프로 세 스 와 협 정 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.