如何在pool.imap中修复种子?

2024-05-07 22:23:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在使用pool.imap时修复seed:

import numpy as np
import random
import time

import multiprocessing
from multiprocessing.pool import ThreadPool

np.random.seed(2019)

N = 10

def print_fn(i):
    time.sleep(random.randint(1,2)) # Emulate some work
    print(i, ':', np.random.uniform(-1.0, 1.0))

def f1():
    for i in range(N):
        print_fn(i)

def f2():
    n_threads = max(min(multiprocessing.cpu_count(), N), 1)
    pool = ThreadPool(n_threads)
    for _ in pool.imap(print_fn, range(N)):
        pass
    pool.close()
    pool.join()

#f1()
f2()

f1()的结果在运行中是相同的:

run1:
0 : 0.8069644288385487
1 : -0.21383898669951495
2 : 0.2479399225955068
3 : 0.27575480204445313
4 : 0.7609981375565242
5 : -0.401655961209485
6 : 0.40439654037310335
7 : 0.8064123226444868
8 : 0.7627638529632341
9 : -0.18850040404017343

run2:
0 : 0.8069644288385487
1 : -0.21383898669951495
2 : 0.2479399225955068
3 : 0.27575480204445313
4 : 0.7609981375565242
5 : -0.401655961209485
6 : 0.40439654037310335
7 : 0.8064123226444868
8 : 0.7627638529632341
9 : -0.18850040404017343

运行f2()的结果不同:

run1:
0 : 0.8069644288385487
2 : -0.21383898669951495
6 : 0.2479399225955068
8 : 0.27575480204445313
1 : 0.7609981375565242
4 : -0.401655961209485
3 : 0.40439654037310335
5 : 0.8064123226444868
9 : 0.7627638529632341
7 : -0.18850040404017343

run2:
0 : 0.8069644288385487
5 : -0.21383898669951495
2 : 0.2479399225955068
3 : 0.27575480204445313
1 : 0.7609981375565242
4 : -0.401655961209485
6 : 0.40439654037310335
8 : 0.8064123226444868
7 : 0.7627638529632341
9 : -0.18850040404017343

如何解决这个问题


Tags: importfortimedefnprandommultiprocessingf2