亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python 多進程和協(xié)程配合使用寫入數(shù)據(jù)

 更新時間:2020年10月30日 11:48:29   作者:py3study  
這篇文章主要介紹了python 多進程和協(xié)程配合使用寫入數(shù)據(jù),幫助大家利用python高效辦公,感興趣的朋友可以了解下

一、需求分析

有一批key已經(jīng)寫入到3個txt文件中,每一個txt文件有30萬行記錄。
現(xiàn)在需要讀取這些txt文件,判斷key是否在數(shù)據(jù)倉庫中。(redis或者mysql)

為空的記錄,需要寫入到日志文件中!

任務分工

1. 使用多進程技術(shù),每一個進程讀取一個txt文件

2. 使用協(xié)程技術(shù),批量讀取txt文件記錄。比如一次性讀取 2000條記錄

注意:打開文件操作,最好在一個進程中,重復打開文件,會造成系統(tǒng)資源浪費!

二、完整代碼

#!/usr/bin/env python3
# coding: utf-8
"""
多線程和協(xié)程配合使用示例
"""

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 # 協(xié)程池數(shù)量
pool = Pool(COROUTINE_NUMBER) # 使用協(xié)程池

# 模擬數(shù)據(jù)倉庫,測試數(shù)據(jù)
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: 寫入內(nèi)容
  :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 + "\n")

 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:
   # 使用協(xié)程池,執(zhí)行任務。語法: pool.map(func,iterator)
   # partial使用偏函數(shù)傳遞參數(shù)
   # 注意:has_null第一個參數(shù),必須是迭代器遍歷的值
   pool.map(partial(self.has_null, number=number), f)

  self.write_log(number, "結(jié)束文件讀取 {} 完成".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):
  """
  使用多線程執(zhí)行程序
  :return:
  """
  # 文件標記列表
  file_list = ["7001", "7002", "7003"]

  p_lst = [] # 線程列表
  for i in file_list:
   # self.run(i)
   p = Process(target=self.run, args=(i,)) # 子進程調(diào)用函數(shù)
   p.start() # 啟動子進程
   p_lst.append(p) # 將所有進程寫入列表中

  for p in p_lst: p.join() # 檢測p是否結(jié)束,如果沒有結(jié)束就阻塞直到結(jié)束,否則不阻塞


TestProgram().main() # 啟動主程序,它會開啟3個進程。

執(zhí)行輸出

以上就是python 多進程和協(xié)程配合使用寫入數(shù)據(jù)的詳細內(nèi)容,更多關(guān)于python 多進程和協(xié)程的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python趣味挑戰(zhàn)之用pygame實現(xiàn)飛機塔防游戲

    Python趣味挑戰(zhàn)之用pygame實現(xiàn)飛機塔防游戲

    一步步實現(xiàn)有趣的飛機塔防游戲,有興趣了解一下嗎?文中有非常詳細的代碼示例,對喜歡玩游戲的小伙伴們很有幫助哦,需要的朋友可以參考下
    2021-05-05
  • python與C互相調(diào)用的方法詳解

    python與C互相調(diào)用的方法詳解

    這篇文章主要給大家介紹了關(guān)于python與C互相調(diào)用方法的相關(guān)資料,文中通過示例代碼詳細介紹了動用的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。
    2017-07-07
  • Python數(shù)學建模學習模擬退火算法整數(shù)規(guī)劃問題示例解析

    Python數(shù)學建模學習模擬退火算法整數(shù)規(guī)劃問題示例解析

    整數(shù)規(guī)劃問題在工業(yè)、經(jīng)濟、國防、醫(yī)療等各行各業(yè)應用十分廣泛,是指規(guī)劃中的變量(全部或部分)限制為整數(shù),屬于離散優(yōu)化問題Discrete Optimization
    2021-10-10
  • python刪除服務器文件代碼示例

    python刪除服務器文件代碼示例

    這篇文章主要介紹了python刪除服務器文件代碼示例,列舉了兩個實例,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • PyTorch實現(xiàn)多維度特征輸入邏輯回歸

    PyTorch實現(xiàn)多維度特征輸入邏輯回歸

    這篇文章主要介紹了PyTorch實現(xiàn)多維度特征輸入邏輯回歸,首先進行數(shù)據(jù)采取數(shù)據(jù)集展開詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • Python json解析庫jsonpath原理及使用示例

    Python json解析庫jsonpath原理及使用示例

    這篇文章主要介紹了Python json解析庫jsonpath原理及使用示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Python 多線程共享變量的實現(xiàn)示例

    Python 多線程共享變量的實現(xiàn)示例

    這篇文章主要介紹了Python 多線程共享變量的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Python利用 matplotlib 繪制直方圖

    Python利用 matplotlib 繪制直方圖

    這篇文章主要介紹了Python利用 matplotlib 模塊繪制直方圖相關(guān)屬性和方法,具有一定的參考價值,需要的朋友可以參考一下
    2021-12-12
  • python學習之SpaCy庫的高級特性詳解

    python學習之SpaCy庫的高級特性詳解

    在之前的文章中,我們介紹了SpaCy庫的一些基本概念和功能,在這篇文章中,我們將深入學習一些更高級的特性,包括詞向量、依賴性解析、和自定義組件
    2023-07-07
  • 使用Python進行二進制文件讀寫的簡單方法(推薦)

    使用Python進行二進制文件讀寫的簡單方法(推薦)

    下面小編就為大家?guī)硪黄褂肞ython進行二進制文件讀寫的簡單方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09

最新評論