最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 多線程處理任務實例

 更新時間:2021年11月06日 14:38:06   作者:soul11201  
這篇文章主要介紹了Python 多線程處理任務,下面文章利用一個真實實例圍繞Python 多線程處理任務的相關資料展開內容,需要的朋友可以參考一下

美餐每天發(fā)一個用Excel匯總的就餐數據,我們把它導入到數據庫后,行政辦公服務用它和公司內的就餐數據進行比對查重。

初始實現(xiàn)是單線程,和import_records去掉多線程后的部分差不多。

讀取Excel數據 —> 發(fā)送到行政服務接口

安全起見線上操作放在了晚上進行。運行時發(fā)現(xiàn)每條數據導入消耗1s多,晚上十點開始跑這幾千條數據想想都讓人崩潰。

等著也是干等,下樓轉兩圈透透氣,屋里齷齪的空氣讓人昏昏沉沉,寒冷讓人清醒不少,突然想到為什么不用多線程呢?

第一版多線程和處理業(yè)務的程序糅合在了一起,跟屎一樣難讀。后面兩天又抽了點時間重構了幾個版本,分離出來一個線程池、迭代器和import_records。

清晰不少,但是迭代器被暴露了出來,需要import_records調用一下判斷當前任務是否給當前線程處理,類似協(xié)程的思路。

暴露有好有壞,但已基本滿足日常使用,可以往一邊先放放了。讀讀書、看看電影,不亦樂乎 :)。

import threading

def task_pool(thread_num, task_fn):

  if thread_num <= 0 :
      raise ValueError

  threads = []

  def gen_thread_checker(thread_id, step):

      base = 1
      i = 0

      def thread_checker():
          nonlocal i

          i += 1
          # print((thread_id,i,step, i < base or (i - base) % step != thread_id))

          if i < base or (i - base) % step != thread_id:
              return False

          return True

      return thread_checker


  for x in range(0, thread_num):
    threads.append(threading.Thread(target=task_fn, args=(x,thread_num, gen_thread_checker(x, thread_num))))

  # 啟動所有線程
  for t in threads:
    t.start()
  # 主線程中等待所有子線程退出
  for t in threads:
    t.join()

import argparse
import re

import requests
from openpyxl import load_workbook
from requests import RequestException

import myThread

parser = argparse.ArgumentParser(description='美餐到店交易數據導入')
parser.add_argument('--filename', '-f', help='美餐到店交易數據 .xlsx 文件路徑', required=True)
parser.add_argument('--thread_num', '-t', help='線程數量', default= 100, required=False)
parser.add_argument('--debug', '-d', help='調試模式', default= 0, required=False)
args = parser.parse_args()

filename = args.filename
thread_num = int(args.thread_num)
debug = args.debug

if debug:
    print((filename,thread_num,debug))


def add_meican_meal_record(data):
   pass

def import_records(thread_id, thread_number, thread_checker):
    wb = load_workbook(filename=filename)
    ws = wb.active

    for row in ws:
        #------------------------------------------
        if row[0].value is None:
            break

        if not thread_checker():
            continue
        #------------------------------------------

        if row[0].value == '日期' or row[0].value == '總計' or not re.findall('^\d{4}-\d{1,2}-\d{1,2}$', row[0].value):
            continue
        else:

            date = str.replace(row[0].value,'-', '')

            order_id = row[3].value
            restaurant_name = row[5].value
            meal_plan_name = row[6].value
            meal_staffid = row[10].value
            identify = row[11].value
    
            add_meican_meal_record({
                'orderId':order_id,
                'date': date,
                'meal_plan_name':meal_plan_name,
                'meal_staffid':meal_staffid,
                'identify':identify,
                'restaurant_name':restaurant_name
            })

myThread.task_pool(thread_num,import_records)

到此這篇關于Python 多線程處理任務實例的文章就介紹到這了,更多相關Python 多線程處理任務內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python內存監(jiān)控工具memory_profiler和guppy的用法詳解

    python內存監(jiān)控工具memory_profiler和guppy的用法詳解

    這篇文章主要介紹了python內存監(jiān)控工具memory_profiler和guppy的用法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Python mutiprocessing多線程池pool操作示例

    Python mutiprocessing多線程池pool操作示例

    這篇文章主要介紹了Python mutiprocessing多線程池pool操作,結合實例形式分析了Python多線程模塊multiprocessing進程池相關操作技巧,需要的朋友可以參考下
    2019-01-01
  • Python存取XML的常見方法實例分析

    Python存取XML的常見方法實例分析

    這篇文章主要介紹了Python存取XML的常見方法,結合具體實例形式較為詳細的分析了Python存取xml的常用方法、優(yōu)缺點比較與相關注意事項,需要的朋友可以參考下
    2017-03-03
  • Python 常用 PEP8 編碼規(guī)范詳解

    Python 常用 PEP8 編碼規(guī)范詳解

    這篇文章主要介紹了Python 常用 PEP8 編碼規(guī)范詳解的相關資料,需要的朋友可以參考下
    2017-01-01
  • Python如何把多個PDF文件合并代碼實例

    Python如何把多個PDF文件合并代碼實例

    這篇文章主要介紹了Python如何把多個PDF文件合并,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Python實現(xiàn)PC屏幕截圖并自動發(fā)送郵箱

    Python實現(xiàn)PC屏幕截圖并自動發(fā)送郵箱

    這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)一個屏幕截圖應用程序,可以定時截取屏幕,并將截圖通過電子郵件發(fā)送給指定的收件人,需要的可以參考下
    2024-12-12
  • 手把手帶你了解python多進程,多線程

    手把手帶你了解python多進程,多線程

    這篇文章主要介紹了python多線程與多進程及其區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-08-08
  • 擴展Django admin的list_filter()可使用范圍方法

    擴展Django admin的list_filter()可使用范圍方法

    今天小編就為大家分享一篇擴展Django admin的list_filter()可使用范圍方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python粘包的解決方案

    python粘包的解決方案

    粘包就是在數據傳輸過程中有多個數據包被粘連在一起被發(fā)送或接受,本文主要介紹了python粘包的解決方案,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 詳解Python Matplotlib解決繪圖X軸值不按數組排序問題

    詳解Python Matplotlib解決繪圖X軸值不按數組排序問題

    這篇文章主要介紹了詳解Python Matplotlib解決繪圖X軸值不按數組排序問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08

最新評論

内乡县| 德庆县| 洪湖市| 武鸣县| 凤山市| 邯郸县| 琼中| 武邑县| 明星| 崇左市| 临泉县| 灌南县| 怀来县| 甘德县| 青神县| 漳平市| 吴忠市| 沈丘县| 广平县| 德安县| 托克托县| 乡城县| 太湖县| 嘉峪关市| 永顺县| 古交市| 平原县| 百色市| 泸水县| 海林市| 庆云县| 横山县| 咸阳市| 仙居县| 墨脱县| 绥化市| 通榆县| 侯马市| 方正县| 清流县| 临武县|