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

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

python - 如何利用多進程來解決循環嵌套速度不行的問題?

瀏覽:149日期:2022-06-29 16:08:47

問題描述

有一個循環里面套循環的模式,在內循環的循環體內要同時用到大循環和小循環的變量。

我這里是簡化成了一個簡單的模型,這種模式如果函數復雜的話速度超級慢,想問一下如何使用多進程的辦法來解決速度問題?

我的思路是,只對小循環采用多進程,在大循環的循環體內寫多進程的代碼,但是一直失敗,求大神給出正確的代碼。

拜謝!

import random as rlist1=list(range(100))i=0reslist=[]while i<2000:#大循環 alist=[]#三個列表變量,每次循環開始時清空 blist=[] clist=[] for each in list1:#小循環x=r.randint(i+30,i+60)+each#涉及到大、小循環變量的幾個函數,這里用random示意y=r.randint(i+60,i+120)+eachz=r.randint(i+60,i+180)+eachres=2.5*x-y-zreslist.append(res)#對函數結果進行操作if res>=50: alist.append(each)if -50<res<50: blist.append(each)if res<=-50: clist.append(each)for each in alist:#在大循環中對小循環中得出的結果進行進一步其他操作print(each) for each in blist:print(each) for each in clist:print(each)i+=1

問題解答

回答1:

首先,并行計算需要各個并行運算的子程序間沒有相互因果關系。小循環內,res與x,y,z,與alist,blist,clist,都是因果關系密切的,很難拆分并行計算。題主貼上來的雖然不是原始代碼,不知道原始代碼里大循環間有沒有因果關系,不過從示意代碼來看,把大循環拆分為N個線程(用不到進程吧)應該是可以的,每個線程計算2000/N次。例如,分為8個線程,線程1計算i=0到249,線程2計算i=250到499,依次類推。。。這里N的大小,可以根據CPU的核數來定,如果N超過CPU的核數,就沒有太大意義了,反而有可能會降低效率。

回答2:

中間應該用elif吧,最后面for的縮進好像也有問題

回答3:

可以在大循環這里開多進程,比如大循環2000次,如CPU的核數是4,則開4個進程,每個進程負責運行500個

小循環結束后,可以開子線程去執行下面的這些后續操作,大循環繼續往前處理

for each in alist:#在大循環中對小循環中得出的結果進行進一步其他操作 print(each)for each in blist: print(each)for each in clist: print(each)回答4:

可以將小循環用子進程去處理 不過這樣 你需要兩個大循環。一個循環處理小循環 ,等處理完這個循環在來個大循環處理后面的事情

像這樣

import random as rdef cumput(i, list1): alist = [] blist = [] clist = [] reslist = [] for each in list1: # 小循環x = r.randint(i + 30, i + 60) + each # 涉及到大、小循環變量的幾個函數,這里用random示意y = r.randint(i + 60, i + 120) + eachz = r.randint(i + 60, i + 180) + eachres = 2.5 * x - y - zreslist.append(res) # 對函數結果進行操作if res >= 50: alist.append(each)if -50 < res < 50: blist.append(each)if res <= -50: clist.append(each) return alist, blist, clist, reslistif __name__ == ’__main__’: multiprocessing.freeze_support() list1 = list(range(100)) i = 0 pool = multiprocessing.Pool(2) res = {} while i < 2000: # 大循環res[i]=pool.apply_async(cumput, (i, list1,))i += 1 pool.close() pool.join() for i in res:for each in res[i].get()[0]: # 在大循環中對小循環中得出的結果進行進一步其他操作 print(each)for each in res[i].get()[1]: print(each)for each in res[i].get()[2]: print(each)回答5:

如果小循環中執行的函數比較耗時的話可以考慮生產者-消費者模型

import randomfrom threading import Threadfrom Queue import Queueresqueue = Queue()aqueue = Queue()bqueue = Queue()cqueue = Queue()def producer(): list1=list(range(100))for _ in range(2000):for each in list1: x=r.randint(i+30,i+60)+each y=r.randint(i+60,i+120)+each z=r.randint(i+60,i+180)+eachres=2.5*x-y-z resqueue.put(res)if res>=50:aqueue.put(each) if -50<res<50:bqueue.put(each) if res<=-50:cqueue.put(each)def consumer_a(): while True:try: data = aqueue.get(timeout=5)except Queue.Empty: returnelse: # 耗時操作 deal_data(data) aqueue.task_done() def consumer_b(): while True:try: data = bqueue.get(timeout=5)except Queue.Empty: returnelse: # 耗時操作 deal_data(data) bqueue.task_done() def consumer_c(): while True:try: data = cqueue.get(timeout=5)except Queue.Empty: returnelse: # 耗時操作 deal_data(data) cqueue.task_done() def consumer_res(): while True:try: data = resqueue.get(timeout=5)except Queue.Empty: returnelse: # 耗時操作 deal_data(data) resqueue.task_done() if __name__ == '__main__': t1 = Thread(target=producer) t2 = Thread(target=consumer_a) ...t1.start() t2.start() 回答6:

題主是不是應該先設計好進程的輸入與輸出,多進程做并行計算的話進程之間的通信是最重要的,據我了解的應該是MPI,比如多層循環,應該是先分發部分數據到每個進程,每個進程做計算后再返回數據整合點,然后合并結果輸出。

還有一個比較重要的點是估算每個進程的執行時間,畢竟有進程間的通信的話等待時間也會導致效率下降。

@一代鍵客 所說,你的嵌套不太符合并行計算的輸入規則,可以看看這個例子

http://blog.csdn.net/zouxy09/...

之前測試過文中的例子,沒啥問題,你沿著這些做的話應該是可以搞出來的

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩 欧美一区二区三区| 日韩精品一级二级| 欧美日韩伊人| 亚洲精品大片| 亚洲第一精品影视| 婷婷综合六月| 99久久激情| 欧美1区免费| 香蕉国产精品| 伊人久久成人| 免费日韩av片| 亚洲一卡久久| 亚洲免费资源| 91精品国产自产观看在线| 日韩国产欧美三级| 婷婷综合国产| 国产欧美久久一区二区三区| 国产精品激情| 91欧美日韩| 国产资源在线观看入口av| 一本大道色婷婷在线| 激情五月综合| 综合亚洲视频| 国产精品三p一区二区| 精品国产aⅴ| 国产欧洲在线| 国产韩日影视精品| 蜜臀av国产精品久久久久 | 婷婷激情图片久久| 男女精品网站| 日韩av中文字幕一区二区| 国产精品xxx在线观看| 国产 日韩 欧美 综合 一区 | 美女久久99| 久久久久国产精品一区三寸| 丝袜亚洲精品中文字幕一区| 欧美日韩调教| 高潮一区二区| 免费人成精品欧美精品| 国产伦理一区| 丝袜美腿诱惑一区二区三区| 亚洲一区二区毛片| 国产欧美亚洲一区| 日本精品影院| 综合色一区二区| 免费亚洲婷婷| 精品在线播放| 国产精品分类| 国产一区清纯| 国产精品久久免费视频| 欧美福利专区| 国产精品亚洲一区二区在线观看 | 丝袜亚洲精品中文字幕一区| 麻豆视频一区二区| 国产综合亚洲精品一区二| 日本不卡一区二区| 水蜜桃久久夜色精品一区| 美日韩精品视频| 国产精品视频首页| 精品日韩毛片| 国产精品大片| 好看的av在线不卡观看| 久久超碰99| 国产视频久久| 日韩.com| 日本不卡视频在线| 伊人久久视频| 91亚洲无吗| 1024精品久久久久久久久| 国产精品亚洲片在线播放| 亚洲免费精品| 亚洲国产欧美日本视频| 日韩精品国产精品| 99视频精品视频高清免费| 国产欧美日韩亚洲一区二区三区| 国产一区二区三区自拍| 国产精品久久久久久久久久白浆| 黑丝一区二区三区| 国产一区福利| 日本成人精品| 一区免费在线| 欧美日韩国产观看视频| 欧美日韩国产一区二区在线观看| 欧美日韩四区| 日韩欧美视频专区| 欧美日韩在线精品一区二区三区激情综合 | 婷婷久久一区| 鲁大师精品99久久久| 另类av一区二区| 日韩精品影视| 欧美91在线|欧美| 亚洲深深色噜噜狠狠爱网站 | 91偷拍一区二区三区精品| 一区二区三区四区在线观看国产日韩| 久久男人天堂| 国产精品入口久久| 亚洲精品九九| 99re国产精品| 91tv亚洲精品香蕉国产一区| 久久不卡国产精品一区二区| 蜜桃久久久久久| 亚洲精品91| 视频在线不卡免费观看| 国产精品4hu.www| 青青在线精品| 亚洲精品影视| 每日更新成人在线视频| 精品丝袜在线| 国产粉嫩在线观看| 九九久久国产| 国产精品成人国产| 91嫩草精品| 亚洲影视一区| 亚洲一区久久| 91高清一区| 久久一区二区中文字幕| 91精品一区国产高清在线gif| 日本一区二区高清不卡| 国产精品不卡| 国产成人77亚洲精品www| 精品一区二区三区的国产在线观看| 欧美亚洲tv| 日本午夜免费一区二区| 日韩一区精品| 亚洲精品免费观看| 蜜臀av一区二区在线免费观看| 欧美欧美黄在线二区| 欧美三区不卡| 欧美视频久久| 国产精品久久| 久久av网址| 久久精品人人| 综合日韩av| 久久精选视频| 亚洲无线一线二线三线区别av| 欧美影院三区| 国产精品普通话对白| 不卡在线一区| 国产视频一区三区| 视频国产精品| 国产欧美日韩在线观看视频| 麻豆中文一区二区| 亚洲深夜视频| 欧洲激情综合| 亚洲综合中文| 国产三级精品三级在线观看国产| 国产精品毛片aⅴ一区二区三区| 国产一区二区色噜噜| 欧美三区四区| 伊人精品视频| 亚洲精品乱码久久久久久蜜桃麻豆 | 五月天激情综合网| 美女久久一区| 国产一精品一av一免费爽爽| 欧美国产极品| 日韩欧美另类一区二区| 亚洲激情久久| 日本亚洲视频在线| 国产精品1区| 日韩另类视频| 合欧美一区二区三区| 911亚洲精品| 超碰成人av| 欧美亚洲在线日韩| 中文视频一区| 欧美aⅴ一区二区三区视频| 中文av在线全新| 日韩网站在线| 国产丝袜一区| 久久久成人网| 日本精品在线播放| 首页国产精品| 日韩亚洲精品在线| 国产精品自拍区| 国产亚洲一区二区手机在线观看| 美女精品在线观看| 精品国产一级| 乱人伦精品视频在线观看| 国产乱码精品一区二区三区亚洲人| 粉嫩av一区二区三区四区五区 | 国产一区二区三区亚洲综合| 亚洲激情中文在线| 久久爱www.| 午夜在线精品偷拍| 精品日韩一区| 免费av一区二区三区四区| 奇米狠狠一区二区三区| 欧洲亚洲一区二区三区| 日韩欧美精品一区二区综合视频| 福利一区二区| 日韩欧美在线精品| 99久久亚洲精品| 免费精品一区| 日韩精品一卡二卡三卡四卡无卡| 国产a久久精品一区二区三区| 亚洲精品伦理| 久久久9色精品国产一区二区三区| 日韩福利视频一区| 欧美香蕉视频| 国产精品视频一区二区三区四蜜臂 |