Python Multiproccess 不会同时单独运行


我想

测试多处理调用如何同时工作,理论上,如果我有以下代码:

import multiprocessing as mp
import time
import numpy as np

def worker(word_id):
    print('hello, my word id is {}'.format(word_id))
    a = np.random.randint(0, 10)
    print(a, 'id {}'.format(word_id))
    if 6 < a < 10:
        time.sleep(4)
        print('hello again, id {}'.format(word_id))
    elif 3 < a < 6:
        time.sleep(3)
        print('hello once more, id {}'.format(word_id))
    else:
        time.sleep(1)
        print('hi, id {}'.format(word_id))

def main():
    process = [mp.Process(target=worker, args=[i]) for i in range(5)]
    for p in process:
        p.start()
    for p in process:
        p.join()
if __name__ == '__main__':
    main()

当我运行时,5 进程将单独调用 worker 函数,为了证明这一点,worker 中生成的随机值将是随机的。

但是我只是得到了相同的值,如下所示:

hello, my word id is 0
2 id 0
hello, my word id is 1
2 id 1
hello, my word id is 2
2 id 2
hello, my word id is 3
2 id 3
hello, my word id is 4
2 id 4
hi, id 3
hi, id 0
hi, id 1
hi, id 2
hi, id 4
显然,我

设置的随机值都是一样的,我无法判断它是否同时运行?任何人都可以分析它并给我一个正确的 python 多孔用法。(也许是我的代码错误(,我的主张是同时运行一个带有 args 的函数,我想知道哪个进程完成。

使用 multiprocessing 时,每个进程都继承父进程的状态。这包括随机数生成器的状态。一个简单的解决方案是在每个工作人员中调用random.seed(),在开始时调用一次。如果您的系统使用系统时间进行种子设定,这可能会失败,但在例如 Linux 上可以很好地工作,它将从操作系统获取种子。

相关内容

  • 没有找到相关文章

最新更新