To speed up slightly this code (with multi core), you can write on different files:
[...]
np.savetxt('addresses_1M_multicore_secrets'+ str(i) +'.txt', thread_addresses, fmt='%s')
return
[...]
This will finish faster, yes. But it will create only one single output file which contains only 62,500 addresses. My example have all 1 million addresses listed. I'm kinda puzzled

what exactly you mean, can you explain, please?
If num_cores = 10, this code save 10k addresses x 10 files. It doesn't create only 1 file, but 1 file for each thread. On my computer works.