中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現多線程處理任務

發布時間:2021-11-06 17:17:48 來源:億速云 閱讀:357 作者:小新 欄目:開發技術

小編給大家分享一下Python如何實現多線程處理任務,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

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

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

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

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

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

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

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如何實現多線程處理任務”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台东县| 广安市| 杭锦旗| 舞钢市| 大荔县| 仁寿县| 五华县| 德清县| 湘西| 烟台市| 商城县| 吴江市| 融水| 海阳市| 利川市| 阿荣旗| 漳平市| 陵水| 浑源县| 靖远县| 深圳市| 临泽县| 承德市| 通辽市| 义乌市| 彰武县| 龙南县| 嵊泗县| 宁国市| 巴彦淖尔市| 抚州市| 亳州市| 建湖县| 红桥区| 渭南市| 墨竹工卡县| 古浪县| 宁远县| 德安县| 城固县| 岢岚县|