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

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

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

瀏覽:21日期: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| 国产拍在线视频| 亚洲三级毛片| 久久要要av| 麻豆国产91在线播放| 伊人影院久久| 一区二区小说| 亚洲成人va| 国产精久久久| 蜜桃一区二区三区在线| 久久久久免费| 日韩av成人高清| 黄色亚洲在线| 激情六月综合| 蜜臀av免费一区二区三区| 亚洲最大av| 久久精品卡一| 麻豆精品新av中文字幕| 亚洲人成高清| 999精品在线| 久久一级电影| 欧美手机在线| 合欧美一区二区三区| 在线看片国产福利你懂的| 日韩三级视频| 日本成人在线一区| 亚洲一区日韩| 视频精品一区二区| 蜜臀av在线播放一区二区三区| 久久亚洲一区| 国产精品亚洲欧美一级在线| 色一区二区三区四区| 在线精品福利| 国产欧美日韩在线观看视频| 亚洲一区有码| 日韩一区二区三区精品视频第3页| 亚洲精品在线二区| 国产精品久久久免费| se01亚洲视频| 美女网站一区| 国产亚洲福利| 99国产精品久久久久久久成人热 | 国产在线观看www| 久久国产乱子精品免费女| 午夜精品久久久久久久久久蜜桃| 国内不卡的一区二区三区中文字幕 | 久久亚洲二区| 亚洲欧美日韩综合国产aⅴ| 久久久久免费av| 免费看欧美美女黄的网站| 日韩午夜视频在线| 国产一区二区三区91| 不卡在线一区二区| 国产精品亚洲片在线播放| 亚洲午夜免费| 日韩一区二区三区精品| 女主播福利一区| 久久免费黄色| 不卡av一区二区| 国产精品婷婷| 日韩三级视频| 欧美日韩夜夜| 精品久久中文| 日韩啪啪电影网| 亚洲97av| 国产欧美一区二区精品久久久| 欧美一级网站| 国产精品亚洲一区二区在线观看| 久久国产三级精品| 欧美精品97| 欧美日韩免费看片| 欧美特黄a级高清免费大片a级| 婷婷久久一区| 亚州精品视频| 国产精品99在线观看| 欧美二区视频| 日本强好片久久久久久aaa| 日韩高清中文字幕一区| 久久99影视| 91成人精品视频| 91久久午夜| 亚洲精品欧美| 国产一区二区三区四区| 欧美日韩精品一本二本三本| 日本在线成人| 亚洲精品在线影院| 日本在线成人| 私拍精品福利视频在线一区| 国产视频一区三区| 精品亚洲成人| 蜜桃视频第一区免费观看| 久久精品国产999大香线蕉| 亚洲视频综合| 久久精品一区二区国产| 电影天堂国产精品| 国产欧美日韩一区二区三区四区| 国产精品色婷婷在线观看| 免费欧美一区| 精品无人区麻豆乱码久久久| 亚洲专区视频| 欧美日韩 国产精品| 国内激情久久| 精品中国亚洲| 欧美日韩1区2区3区| 免费欧美在线视频| 欧美日韩一二三四| 精品国产午夜| 国产精品对白久久久久粗| 91精品观看| 日韩欧美一区二区三区在线观看| 欧美日韩一区二区三区不卡视频 | 亚洲午夜精品久久久久久app| 精品一区av| 国产精品一区二区av日韩在线| 免费看欧美美女黄的网站| 天堂资源在线亚洲| 久久久久一区| av综合电影网站| 久久av导航| 国产精品调教| 91欧美精品| 美日韩一区二区三区| 日韩av一区二区在线影视| 亚洲综合小说| 男女男精品视频网| 国产综合婷婷| 国产精品2023| 国产精品男女| 国产不卡av一区二区| 久久久久久久欧美精品| 日韩高清不卡在线| 国产精品一区二区三区四区在线观看| 97精品视频在线看| 欧美日韩国产观看视频| 国产欧洲在线| 日本a级不卡| 97久久中文字幕| 老鸭窝亚洲一区二区三区| 亚洲制服少妇| 国产一卡不卡| 日韩欧美中文在线观看| 国产区精品区| 国产精品久久久久蜜臀| 五月激情久久| 亚洲女人av| 国产亚洲精品精品国产亚洲综合| 国产精品www.| 日韩免费视频| 久热精品在线| 久久99视频| 婷婷综合在线| 日韩国产精品久久久久久亚洲| 国产乱码精品一区二区三区四区| 国产成人免费| 日韩精品一二区| 国语对白精品一区二区| 夜夜嗨一区二区| 亚洲深夜福利在线观看| 国产精品九九| 99国产精品视频免费观看一公开| 日韩亚洲精品在线观看| 日韩欧美一区免费| 国产亚洲精品美女久久 | 国产一区日韩一区| 日韩av成人高清| 欧美日韩视频一区二区三区| 国产色99精品9i| 日本 国产 欧美色综合| 都市激情国产精品| 亚洲精品乱码| 欧美成人久久| 捆绑调教日本一区二区三区| 日产欧产美韩系列久久99| 日韩综合精品| 国模大尺度视频一区二区| 日韩av不卡在线观看| 六月丁香综合| 色一区二区三区四区| 亚洲有吗中文字幕| 欧美va亚洲va日韩∨a综合色| 国产一区二区三区亚洲| 国产精品视频一区视频二区| 免费高清在线一区| 日韩网站在线| 欧美日韩四区| 精品一区在线| 亚洲电影在线一区二区三区| 国产成人精品一区二区三区在线| 国产精品麻豆成人av电影艾秋 | 中文在线免费视频| 欧美国产不卡| jizzjizz中国精品麻豆| 精品国产欧美| 四虎884aa成人精品最新| 亚洲精品国产嫩草在线观看| 97久久精品| 国产乱码精品| 国产一区二区三区四区五区|