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?
Your code doesn't store private keys, are you sure you want to have only a list of addresses without their private keys?
this code is obviously made simple. My own python program saves the keys as well of course. But for the sake of easiness I want to keep the code simple so everyone is able to test and compare.