2017-07-30 66 views
1

您好,我有一個程序,它需要從標準,我認爲這將是更快,如果我使用多它的輸入,但它實際上需要更長的時間:Python的多重不使其更快

正常:

import sys 
import hashlib 
import base58 
from progress.bar import ShadyBar 


bar=ShadyBar('Fighting', max=100000, suffix='%(percent)d%% - %(index)d/%(max)d - %(elapsed)d') 

listagood=[] 
for cc in sys.stdin: 
    try: 
     bar.next() 
     hexwif=cc[0:51]   
     enco=base58.b58decode_check(hexwif)  
     Fhash=hashlib.sha256(enco)   
     d2=hashlib.sha256() 
     d2.update(Fhash.digest()) 
     Shash=d2.hexdigest() 
     Conf1=Shash[0:8] 
     encooo=base58.b58decode(hexwif) 
     Conf2=encooo.encode("hex") 
     Conf2=Conf2[len(Conf2)-8:len(Conf2)] 
     if Conf1==Conf2: 
      listagood.append(cc) 
    except: 
     pass 



bar.finish() 
print("\nChecksum: ") 
print(listagood) 
print("\n") 

多處理:

def worker(line): 
    try: 
     hexwif=line[0:51]  
     enco=base58.b58decode_check(hexwif) 
     Fhash=hashlib.sha256(enco)   
     d2=hashlib.sha256() 
     d2.update(Fhash.digest()) 
     Shash=d2.hexdigest() 
     Conf1=Shash[0:8] 
     encooo=base58.b58decode(hexwif) 
     Conf2=encooo.encode("hex") 
     Conf2=Conf2[len(Conf2)-8:len(Conf2)] 
     if Conf1==Conf2: 
      return(line) 
    except: 
     #e=sys.exc_info() 
     #print(str(e)) 
     pass 



listagood=[] 
pool = multiprocessing.Pool(processes=4) 
bar=ShadyBar('Fighting', max=100000, suffix='%(percent)d%% - %(index)d/%(max)d - %(elapsed)d') 
for result in pool.imap(worker, sys.stdin): 
    if result != None: 
     listagood.append(result) 
    #print "Result: %r" % (result) 
    bar.next() 


bar.finish() 
print("\nChecksum: ") 
print(listagood) 
print("\n") 

不幸的是,當我檢查經過的時間,它幾乎是三重多進程之一。

對於每個物理內核,我有一個處理器,兩個物理內核和兩個虛擬內核。

我怎麼知道這是否是由多處理開銷造成的?或者是我做錯了什麼?

任何幫助將不勝感激

回答

0

池劃分在多個進程的輸入。在你的情況下4.但是你一次只傳遞一個輸入,實際上並沒有觸發所有4個線程。 使用以下內容,看看時間的變化

pool.imap(worker, sys.stdin.readlines()) 

希望這會有所幫助。

+0

我會試試看,即時通訊仍然理解這個多處理的工作原理,感謝評論,我會盡快回復結果 –