Python多处理并没有让它更快



你好,我有一个程序从 stdin 获取输入,我认为如果我使用多处理会更快,但实际上需要更长的时间:

正常:

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")

不幸的是,当我检查经过的时间时,它几乎是多进程的三倍。

我有一个处理器、两个物理内核,每个物理内核有 2 个虚拟内核。

我如何知道这是否是由多处理开销引起的?还是我做错了什么?

任何帮助将不胜感激

池将输入划分为多个进程。在您的情况下 4.但是您一次传递一个输入,实际上并没有触发所有 4 个线程。 使用以下内容并查看计时的变化

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

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新