这是我当前的脚本:
import argparse
from pybitcointools import *
parser = argparse.ArgumentParser()
parser.add_argument('filename')
args = parser.parse_args()
with open(args.filename) as textfile:
for line in textfile:
priv = sha256(line.rstrip())
wif_u = encode_privkey(priv, 'wif')
wif_c = encode_privkey(priv, 'wif_compressed')
addr_u = pubtoaddr(privtopub(priv))
addr_c = pubtoaddr(compress(privtopub(priv)))
print("%s,%s" % (addr_u, wif_u))
print("%s,%s" % (addr_c, wif_c))
我运行此脚本将1000行转换为2000个比特币大脑钱包(1000 x 2包括压缩和未压缩的)。运行需要12.5秒。
如果我删除这些行,它将从12.5秒降低到0.2秒:
addr_u = pubtoaddr(privtopub(priv))
addr_c = pubtoaddr(compress(privtopub(priv)))
但是,当然,我需要地址,而不仅仅是WIF格式的私钥。
这是我要弄清楚的三件事:
为什么地址生成要比私钥生成花费更长的时间?
是否有一种方法可以加快现有Python脚本的运行时间,使其在一秒钟之内?
如果没有,没有人知道一个简单的方法可以更快地做到这一点吗?
我不介意使用Python,Perl,C,无论做什么工作,而且速度最快。
答案 0 :(得分:1)
您两次致电privtopub(priv)
。这样可以保存对fast_multiply
的调用,这可能是整个程序中最慢的功能。
我建议先做:
pub = privtopub(priv)
addr_u = pubtoaddr(pub)
addr_c = pubtoaddr(compress(pub))
然后我建议使用multiprocessing.Pool
:
import argparse
from pybitcointools import *
def convert(line):
priv = sha256(line.rstrip())
wif_u = encode_privkey(priv, 'wif')
wif_c = encode_privkey(priv, 'wif_compressed')
pub = privtopub(priv)
addr_u = pubtoaddr(pub)
addr_c = pubtoaddr(compress(pub))
return (addr_u, wif_u, addr_c, addr_u)
if __name__=="__main__":
parser = argparse.ArgumentParser()
parser.add_argument('filename')
args = parser.parse_args()
pool = multiprocessing.Pool()
with open(args.filename) as textfile:
for addr_u, wif_u, addr_c, addr_u in pool.imap(convert, textfile):
print("%s,%s" % (addr_u, wif_u))
print("%s,%s" % (addr_c, wif_c))