Я пытаюсь решить проблему майнинга в python. Учитывая строку s
и целое число z
, я должен найти наименьшее значение n
, такое, что sha256(sha256(x))
оканчивается z
нулями, где x
- строка, заданная добавлением n
к s
. Я написал следующий код:
from hashlib import sha256
from multiprocessing import Pool
def solve(string, zeros, cores):
with Pool(cores) as p:
for i in range(cores):
result = p.apply_async(sub_solve, args=(string, zeros, i, cores), callback = p.terminate)
return result
def sub_solve(s, z, n0, cores):
n = n0 - 1
d = ""
while d[:-z] != "0"*z:
n += cores
s1 = (s + str(n)).encode()
h1 = sha256(s1)
h2 = sha256(h1.digest())
d = h2.hexdigest()
if n % 100000 == 0:
print("%d: %s" %(n,d))
return n
Вызов solve
с string = s
, zeros = z
и cores = number of cores to use
он должен выполнять параллельные sub_solve
вызовы в разных ядрах, где каждое должно решить проблему дляотличается n
. Когда один из рабочих процессов решит проблему, весь пул должен прекратить работу. Когда я запускаю solve
, я получаю такой вывод:
>>> pow.solve("asd",2,4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\user\Desktop\pow.py", line 7, in solve
result = p.apply_async(sub_solve, args=(string, zeros, i, cores), callback = p.terminate)
File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\pool.py", line 355, in apply_async
raise ValueError("Pool not running")
ValueError: Pool not running
Как я могу решить проблему?