Ah, I misunderstood your problem. In this case, the issue is that the workers are destroyed and reinitialized after every epoch, so the same seed is set every time.
def worker_init_fn(worker_id):
    np.random.seed(np.random.get_state()[1][0] + worker_id + int(time() * 1000 % 1000))

would make it more pseudo-random for example.