[問題] 新手請教multiprocessing
不好意思直接貼程式碼..我想包一個父類別可以自動切割資料讓子類別平行運算,
算完後再把結果加總。
但單程跟多程跑出來的結果不同,可能資料在多程中被亂寫了..
請問怎麼設計才是正確的?
import multiprocessing
class Super:
def main(self):
pass
def result(self):
return []
def join(self, result=[]):
pass
def Run(self, param):
for i in range(param):
self.main()
return self.result()
def SingleRun(self):
result = []
for i in range(10):
result.append(self.Run(i))
self.join(result)
def MultiRun(self):
pool = multiprocessing.Pool(processes=4)
result = []
for i in range(10):
result.append(pool.apply_async(self.Run, (i,)))
pool.close()
pool.join()
result = [r.get() for r in result]
self.join(result)
class Child(Super):
def __init__(self):
self.total = 0
def main(self):
self.total += 1
def result(self):
return self.total
def join(self, result=[]):
total = 0
for r in result:
total += r
print('the result is', total)
c = Child()
if __name__ == '__main__':
c.SingleRun()
c.__init__()
c.MultiRun()
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.209.142.12
※ 編輯: Casval 來自: 210.209.142.12 (05/25 16:26)
→
05/25 17:08, , 1F
05/25 17:08, 1F
→
05/25 17:16, , 2F
05/25 17:16, 2F
→
05/26 02:12, , 3F
05/26 02:12, 3F
→
05/26 08:05, , 4F
05/26 08:05, 4F
補上後來改的版本,運算結果為55
import multiprocessing
class Super:
def init(self):
pass
def main(self):
pass
def result(self):
return []
def join(self, result=[]):
pass
def Run(self, param):
for i in range(param):
self.main()
return self.result()
def SingleRun(self):
result = []
for i in range(1,11):
self.init()
result.append(self.Run(i))
self.join(result)
def MultiRun(self):
pool = multiprocessing.Pool(processes=4)
result = []
for i in range(1,11):
result.append(pool.apply_async(func=self.Run, args=(i,)))
pool.close()
pool.join()
result = [r.get() for r in result]
self.join(result)
class Child(Super):
def init(self):
self.total = 0
def main(self):
self.total += 1
def result(self):
return self.total
def join(self, result=[]):
total = 0
for r in result:
total += r
print('the result is', total)
c = Child()
if __name__ == '__main__':
c.init()
c.SingleRun()
c.init()
c.MultiRun()
※ 編輯: Casval 來自: 210.209.142.12 (05/26 08:07)
→
05/26 08:09, , 5F
05/26 08:09, 5F
→
05/26 08:10, , 6F
05/26 08:10, 6F
→
05/26 08:34, , 7F
05/26 08:34, 7F
→
05/26 08:45, , 8F
05/26 08:45, 8F
→
05/26 08:47, , 9F
05/26 08:47, 9F
→
05/26 08:48, , 10F
05/26 08:48, 10F
→
05/26 21:03, , 11F
05/26 21:03, 11F
→
05/28 11:52, , 12F
05/28 11:52, 12F
→
05/28 11:53, , 13F
05/28 11:53, 13F
→
05/28 14:02, , 14F
05/28 14:02, 14F
→
05/28 14:03, , 15F
05/28 14:03, 15F
→
05/29 09:01, , 16F
05/29 09:01, 16F
→
05/29 09:02, , 17F
05/29 09:02, 17F
→
05/29 09:18, , 18F
05/29 09:18, 18F
→
05/29 09:18, , 19F
05/29 09:18, 19F
→
05/30 14:11, , 20F
05/30 14:11, 20F
Python 近期熱門文章
PTT數位生活區 即時熱門文章