猿问

加速 Python 脚本或寻找替代方案?

这是我当前的脚本:


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 格式的私钥。

所以这是我想弄清楚的三件事:

  1. 为什么地址生成时间比私钥生成时间长?

  2. 有没有办法加快现有 Python 脚本的运行速度,使其在不到一秒的时间内运行?

  3. 如果没有,有没有人知道可以更快地完成此操作的简单替代方法?

我不介意使用 Python、Perl、C,无论做什么,都是最快的。


收到一只叮咚
浏览 162回答 1
1回答

守着一只汪

你打了privtopub(priv)两次电话。这将节省一个fast_multiply可能是整个程序中最慢的函数的调用。我建议先做:pub = privtopub(priv)addr_u = pubtoaddr(pub)addr_c = pubtoaddr(compress(pub))然后我建议使用multiprocessing.Pool:import argparsefrom 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))
随时随地看视频慕课网APP

相关分类

Python
我要回答