python如何中断多处理程序并存储来自每个核心的特定数据,以便在下次运行时加载它?

2024-09-27 09:26:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下python3代码:

from multiprocessing import Pool, cpu_count
import hashlib
import signal

def checkHash(argsList):
    key = argsList[0]
    pattern = argsList[1]
    cpusNum = argsList[2]
    coreId = argsList[3]
    while True:
        coreId += cpusNum
        newHash = hashlib.sha256()
        newFeed = key + '_' + str(coreId)
        newHash.update(newFeed.encode('utf-8'))
        result = newHash.hexdigest()
        if result.startswith(pattern):
            return coreId


def signalIgnorer():
    signal.signal(signal.SIGINT, signal.SIG_IGN)


class POWGenerator:
    def __init__(self, key, difficulty, requestedCores):
        self.key = key
        self.beginningPattern = '0' * difficulty
        coresNum = cpu_count()
        if requestedCores <= coresNum:
            self.coresToUse = requestedCores
        else:
            self.coresToUse = coresNum

    def getSolution(self):
        jobsArgsList = []
        for cou in range(0,self.coresToUse):
            jobsArgsList.append((self.key, self.beginningPattern, self.coresToUse, cou))

        with Pool(self.coresToUse, signalIgnorer) as workPool:
            try:
                for gotmatch in workPool.imap_unordered(checkHash, jobsArgsList):
                    if gotmatch:
                        return gotmatch
            except KeyboardInterrupt:
                return None

if __name__ == "__main__":
    import sys
    key = sys.argv[1]
    difficulty = sys.argv[2]
    cores = sys.argv[3]
    gen = POWGenerator(key, int(difficulty), int(cores))
    print("Solution: {}".format(gen.getSolution()))

它用于每次为gpg公钥指纹创建工作证明

参数:

密钥:字符串(gpg公钥指纹)
难度:正整数(sha256sum应该从多少个零开始)
核心:正整数(要使用多少核心)
它获取一个数字(解决方案),并在每次检查时给它一个从0向上的值,直到:sha256sum(fingerprint+'\'+解决方案)给出一个以难度零数开始的哈希值

问题是:

我想要的是能够中断程序(即键盘中断)并在以后继续,而不必从头开始搜索。最简单的方法是在键盘中断时创建一个json文件,并在启动程序时首先搜索要从中加载数据的特定文件。
但我不知道怎么做。我不知道如何从每个单进程中获取coreId变量以及键盘中断上的进程名,并将它们保存为json文件中的key[Value],以便下次程序运行时使用。你知道吗


Tags: keyimportselfsignalreturnifdefsys

热门问题