Я бы хотел повысить эффективность этой функции, разделив приращение на количество присутствующих ядер / процессов.
def mine_block(self, core_number):
"""Mine block once node has a certain number of transactions."""
difficulty_zeroes = self.difficulty * "0" # Number of zeroes needed
# Mine block until an appropriate nonce has been found
while (self.hash[0:self.difficulty] != difficulty_zeroes):
self.nonce += core_number
self.hash = self.compute_block_hash()
print ("Block mined.")
Я реализовал решение, основанное на этом ответе .У меня не было ошибок, но я заметил, что когда я увеличил количество ядер / процессов, «мои» мои блоки заняли больше времени.По сути, я хочу, чтобы каждый процесс увеличивал одноразовый номер на соответствующий порядковый номер.Например: если бы у нас было 4 процесса, первый процесс увеличил бы одноразовый номер на 1, 2-й процесс на 2, 3-й процесс на 3 и т. Д., Пока не будет выполнено условие.Я предполагал, что многопроцессорная обработка сделает это автоматически, но это не так.
Моя текущая многопроцессорная реализация выглядит следующим образом:
def mine_blocks(self):
"""Use multiprocessing to enhance block mining."""
nonce_processes = []
core_range = range(1, self.numcores + 1)
for core in core_range:
p = mp.Process(target=self.mine_block, args=(core,))
p.start()
nonce_processes.append(p)
for process in nonce_processes: # Terminate processes
process.terminate()