为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

收到一只叮咚 2021-09-24 16:07:52
这是我当前的脚本:import argparsefrom 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,无论做什么,都是最快的。
查看完整描述

1 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

你打了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))


查看完整回答
反对 回复 2021-09-24
  • 1 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信