日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

如何提高python 中for循環的效率

瀏覽:17日期:2022-07-30 09:04:14

對于某個城市的出租車數據,一天就有33210000條記錄,如何將每輛車的數據單獨拎出來放到一個專屬的文件中呢?

思路很簡單:

就是循環33210000條記錄,將每輛車的數據搬運到它該去的文件中。

但是對于3000多萬條數據,一個一個循環太消耗時間,我花了2個小時才搬運了60萬數據,算算3000萬我需要花費100個小時,也就需要4-5天。并且還需要保證這五天全天開機,不能出現卡機的事故。

因此,需要使用并行進行for循環的技巧:

由于3000萬數據放到csv中導致csv打不開,因此我就把一個csv通過split軟件將其切分成每份60萬,共53個csv。

我原來的思路是讀取文件夾,獲取由每一個60萬的csv文件組成的列表,再分別對每一個60萬的csv進行處理。實質上還是循環33210000次,并行for循環就是同時處理幾個60萬的csv文件,就能成倍的減少時間消耗。

并行進行for循環是受下面的方法啟發:

我之前的做法類似這樣:

words = [’apple’, ’bananan’, ’cake’, ’dumpling’] for word in words: print word

并行for循環類似這樣:

from multiprocessing.dummy import Pool as ThreadPoolitems = list()pool = ThreadPool()pool.map(process, items)pool.close()pool.join()

其中,process是進行處理的函數

實例代碼如下:

# -*- coding: utf-8 -*-import timefrom multiprocessing.dummy import Pool as ThreadPooldef process(item): print(’正在并行for循環’) print(item) time.sleep(5)items = [’apple’, ’bananan’, ’cake’, ’dumpling’]pool = ThreadPool()pool.map(process, items)pool.close()pool.join()

補充知識:Python3用多線程替代for循環提升程序運行速度

優化前后新老代碼如下:

from git_tools.git_tool import get_collect_projects, QQNews_Gitfrom threading import Thread, Lockimport datetimebase_url = 'http://git.xx.com'project_members_commits_lang_info = {}lock = Lock()threads = []’’’Author:zenkilan’’’def count_time(func): def took_up_time(*args, **kwargs): start_time = datetime.datetime.now() ret = func(*args, **kwargs) end_time = datetime.datetime.now() took_up_time = (end_time - start_time).total_seconds() print(f'{func.__name__} execution took up time:{took_up_time}') return ret return took_up_timedef get_project_member_lang_code_lines(git, member, begin_date, end_date): global project_members_commits_lang_info global lock member_name = member['username'] r = git.get_user_info(member_name) if not r['id']: return user_commits_lang_info = git.get_commits_user_lang_diff_between(r['id'], begin_date, end_date) if len(user_commits_lang_info) == 0: return lock.acquire() project_members_commits_lang_info.setdefault(git.project, dict()) project_members_commits_lang_info[git.project][member_name] = user_commits_lang_info lock.release()def get_project_lang_code_lines(project, begin_date, end_date): global threads git = QQNews_Git(project[1], base_url, project[0]) project_members = git.get_project_members() if len(project_members) == 0: return for member in project_members: thread = Thread(target=get_project_member_lang_code_lines, args=(git, member, begin_date, end_date)) threads.append(thread) thread.start()@count_timedef get_projects_lang_code_lines(begin_date, end_date): ''' 獲取項目代碼行語言相關統計——新方法(提升效率) 應用多線程替代for循環 并發訪問共享外部資源 :return: ''' global project_members_commits_lang_info global threads for project in get_collect_projects(): thread = Thread(target=get_project_lang_code_lines, args=(project, begin_date, end_date)) threads.append(thread) thread.start()@count_timedef get_projects_lang_code_lines_old(begin_date, end_date): ''' 獲取項目代碼行語言相關統計——老方法(耗時嚴重) 使用最基本的思路進行編程 雙層for循環嵌套并且每層都包含耗時操作 :return: ''' project_members_commits_lang_info = {} for project in get_collect_projects(): git = QQNews_Git(project[1], base_url, project[0]) project_members = git.get_project_members() user_commits_lang_info_dict = {} if len(project_members) == 0: continue for member in project_members: member_name = member['username'] r = git.get_user_info(member_name, debug=False) if not r['id']:continue try:user_commits_lang_info = git.get_commits_user_lang_diff_between(r['id'], begin_date, end_date)if len(user_commits_lang_info) == 0: continueuser_commits_lang_info_dict[member_name] = user_commits_lang_infoproject_members_commits_lang_info[git.project] = user_commits_lang_info_dict except:pass return project_members_commits_lang_infodef test_results_equal(resultA, resultB): ''' 測試方法 :param resultA: :param resultB: :return: ''' print(resultA) print(resultB) assert len(str(resultA)) == len(str(resultB))if __name__ == ’__main__’: from git_tools.config import begin_date, end_date get_projects_lang_code_lines(begin_date, end_date) for t in threads: t.join() old_result = get_projects_lang_code_lines_old(begin_date, end_date) test_results_equal(old_result, project_members_commits_lang_info)

老方法里外層for循環和內層for循環里均存在耗時操作:

1)git.get_project_members()

2)git.get_user_info(member_name, debug=False)

分兩步來優化,先里后外或先外后里都行。用多線程替換for循環,并發共享外部資源,加鎖避免寫沖突。

測試結果通過,函數運行時間裝飾器顯示(單位秒):

get_projects_lang_code_lines execution took up time:1.85294

get_projects_lang_code_lines_old execution took up time:108.604177

速度提升了約58倍

以上這篇如何提高python 中for循環的效率就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
综合激情一区| 成人国产精选| 亚洲视频国产精品| 精品理论电影在线| 亚洲自拍另类| 国产白浆在线免费观看| 一区二区三区国产盗摄| 国内自拍视频一区二区三区| 性一交一乱一区二区洋洋av| 丰满少妇一区| 国产亚洲欧美日韩精品一区二区三区 | 午夜久久美女| 国产a亚洲精品| 国产极品一区| 国产麻豆一区二区三区精品视频| 国产高清一区二区| 国产 日韩 欧美 综合 一区| 国产丝袜一区| 欧美精品国产| 国产精品成人国产| 一本一道久久a久久| 国产美女精品| 欧美日韩国产欧| 在线视频日韩| 久久精品国产大片免费观看| 国产精品xxx| 精品国产一级| 福利精品在线| 蜜桃成人av| 亚洲精品一二| 国产精品美女午夜爽爽| 国产精品黄网站| 亚洲黄色网址| 五月天综合网站| 综合干狼人综合首页| 色综合视频一区二区三区日韩 | 久久国产精品亚洲77777| 在线亚洲一区| 88久久精品| 午夜av成人| 首页欧美精品中文字幕| 久久国产尿小便嘘嘘| 超碰成人av| 中文字幕中文字幕精品| 国产精品乱战久久久| 久久久久99| 91精品一区| 精品在线99| 国产九九精品| 宅男在线一区| 欧美精品成人| 老鸭窝毛片一区二区三区| 国产精品综合| 黄色亚洲免费| 狠狠久久伊人| 日欧美一区二区| 久久九九精品| 国产欧美久久一区二区三区| 欧美1区2区3区| 免费视频一区二区三区在线观看| 亚洲成人精品| 精品资源在线| 久久国产三级| 国产精品日韩| 成人日韩精品| 精品久久免费| 麻豆久久久久久久| 青青草国产精品亚洲专区无| 最新日韩av| 在线日韩视频| 久久蜜桃精品| 亚洲综合在线电影| 国产网站在线| 97人人精品| 亚洲黄色免费看| 欧美成a人国产精品高清乱码在线观看片在线观看久 | xxxxx性欧美特大| 欧美视频久久| 日本欧美一区| 国产日韩高清一区二区三区在线| 国产午夜久久| 视频一区中文字幕国产| 日韩专区一卡二卡| 蜜臀久久99精品久久久久久9 | 最新中文字幕在线播放| 美女国产精品久久久| 国产精品九九| 麻豆网站免费在线观看| 日韩久久一区二区三区| 欧美aa一级| 亚洲一区黄色| 日本麻豆一区二区三区视频| 国产图片一区| 国产videos久久| 久久精品1区| 一区二区三区网站| 久久av资源| 国内亚洲精品| 日韩一区二区三区四区五区| 欧美一区二区三区免费看| 欧美精品不卡| 91精品二区| 欧美精品导航| 欧美日韩三区| 四虎成人精品一区二区免费网站| 国产精品视频一区二区三区| 欧美精品观看| 精品久久福利| 狠狠色综合网| 日韩视频一二区| 亚洲www啪成人一区二区| 蜜桃免费网站一区二区三区| 久久免费视频66| 日韩精品一卡二卡三卡四卡无卡| 青青青国产精品| 黄色欧美日韩| 国产精品专区免费| 精品免费av一区二区三区| 亚洲免费中文| 欧美黄页在线免费观看| 亚洲精品888| 亚洲一级少妇| 免费一级欧美片在线观看网站| 影视先锋久久| 精品免费av| 国产精品视频首页| 日韩欧美美女在线观看| 女同性一区二区三区人了人一| 久久精品一区| 欧美日韩一区自拍| 日韩avvvv在线播放| 免费一级片91| 亚洲专区欧美专区| 美女久久久久| 激情五月综合| 午夜日韩在线| 蜜桃久久av| 日韩一区网站| 久久精品99国产国产精| 欧美特黄视频| 亚洲一级黄色| 亚洲欧美日韩一区在线观看| 尤物在线精品| 免费精品视频| 日本视频中文字幕一区二区三区| 日本不卡高清| 国产精品theporn| 日韩av免费大片| 亚洲福利国产| 一区二区国产在线观看| 亚洲免费福利一区| 欧美日韩xxxx| 福利一区二区| 国产一区日韩一区| 丝袜av一区| 在线亚洲精品| 日本不卡一区二区三区| 国产精品日韩精品中文字幕| 国产一区二区三区亚洲综合| 日韩三区在线| 亚洲精品进入| 中文字幕成在线观看| 快she精品国产999| 国产免费av国片精品草莓男男| 高清av不卡| 欧美日韩亚洲一区三区| 国产成人精选| 亚洲三级网站| av资源亚洲| 美日韩精品视频| 精品国产不卡一区二区| 西西人体一区二区| 日韩大片在线播放| 国产日韩欧美中文在线| 亚洲高清成人| 精品国产aⅴ| 91精品国产自产精品男人的天堂| 日韩三区在线| 麻豆91小视频| 亚洲精品三级| 日韩午夜免费| www.com.cn成人| 老司机精品视频网| 国产亚洲精品美女久久久久久久久久| 精品无人区麻豆乱码久久久 | 亚洲免费福利一区| 午夜久久免费观看| 色婷婷久久久| 国产成人精品一区二区免费看京| 日韩精品一区二区三区av | 午夜日韩福利| 亚洲无线一线二线三线区别av| 麻豆视频在线观看免费网站黄| 国产麻豆一区二区三区| 在线亚洲免费| 亚洲深深色噜噜狠狠爱网站| 9色国产精品| 蘑菇福利视频一区播放| 国产精品女主播一区二区三区 | 日韩国产在线观看|