Python多处理执行不需要的相同进程

2024-05-16 00:14:18 发布

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

这个问题来自:multiprocessing/threading: data appending & output return

我或多或少都有下面相同的“run”函数,只是没有附加绘图跟踪对象,而是附加了我将在后面处理的x、y和z向量。“run”的内容将创建随机(为了参数起见)x、y和z向量(随机长度和元素),这些向量将附加到输入数组中

def run(N, data_test):
    for running in range N:
        ...
        data_test.append([x_vec, y_vec, z_vec])
        ...

if __name__ == '__main__':
    jobs = []

    N = 3

    manager = Manager()       
    data_test = manager.list()

    for i in range(N):
        p = Process(target=run, args=(N, data_test)
        jobs.append(p)
        p.start()

问题是运行的是相同的过程,甚至是for循环在“run”中的每次迭代。请参见下面的输出:

For 17 x 17 assembly, 9 x 9 is needed. Your shape: (9, 9)
No neutrons generated for neutron 1
No neutrons generated for neutron 1
No neutrons generated for neutron 1
No neutrons generated for neutron 2
No neutrons generated for neutron 2
No neutrons generated for neutron 2
No neutrons generated for neutron 3
No neutrons generated for neutron 3
No neutrons generated for neutron 3
No neutrons generated for neutron 4
No neutrons generated for neutron 4
No neutrons generated for neutron 4
No neutrons generated for neutron 5
No neutrons generated for neutron 5
No neutrons generated for neutron 5
No neutrons generated for neutron 6
No neutrons generated for neutron 6
No neutrons generated for neutron 6
No neutrons generated for neutron 7
No neutrons generated for neutron 7
No neutrons generated for neutron 7
[[array([-4.22976272, -4.27405131]), array([-2.30184294, -2.69171934]), array([-10.40448512, -10.02764128])], [array([-1.93762109, -5.28861615]), array([ 15.84425545,  11.2366617 ]), array([ 48.19059553,  53.62837897])], [array([-15.81378301, -17.48005479]), array([ 4.09509284,  5.43022322]), array([-49.76008815, -46.75370686])], [array([-4.22976272, -4.27405131]), array([-2.30184294, -2.69171934]), array([-10.40448512, -10.02764128])], [array([-1.93762109, -5.28861615]), array([ 15.84425545,  11.2366617 ]), array([ 48.19059553,  53.62837897])], [array([-15.81378301, -17.48005479]), array([ 4.09509284,  5.43022322]), array([-49.76008815, -46.75370686])], [array([-4.22976272, -4.27405131]), array([-2.30184294, -2.69171934]), array([-10.40448512, -10.02764128])], [array([-1.93762109, -5.28861615]), array([ 15.84425545,  11.2366617 ]), array([ 48.19059553,  53.62837897])], [array([-15.81378301, -17.48005479]), array([ 4.09509284,  5.43022322]), array([-49.76008815, -46.75370686])], [array([-4.22976272, -4.27405131]), array([-2.30184294, -2.69171934]), array([-10.40448512, -10.02764128])], [array([-1.93762109, -5.28861615]), array([ 15.84425545,  11.2366617 ]), array([ 48.19059553,  53.62837897])], [array([-15.81378301, -17.48005479]), array([ 4.09509284,  5.43022322]), array([-49.76008815, -46.75370686])], [array([-4.22976272, -4.27405131]), array([-2.30184294, -2.69171934]), array([-10.40448512, -10.02764128])], [array([-1.93762109, -5.28861615]), array([ 15.84425545,  11.2366617 ]), array([ 48.19059553,  53.62837897])], [array([-15.81378301, -17.48005479]), array([ 4.09509284,  5.43022322]), array([-49.76008815, -46.75370686])], [array([-4.22976272, -4.27405131]), array([-2.30184294, -2.69171934]), array([-10.40448512, -10.02764128])], [array([-1.93762109, -5.28861615]), array([ 15.84425545,  11.2366617 ]), array([ 48.19059553,  53.62837897])], [array([-15.81378301, -17.48005479]), array([ 4.09509284,  5.43022322]), array([-49.76008815, -46.75370686])], [array([-4.22976272, -4.27405131]), array([-2.30184294, -2.69171934]), array([-10.40448512, -10.02764128])], [array([-1.93762109, -5.28861615]), array([ 15.84425545,  11.2366617 ]), array([ 48.19059553,  53.62837897])], [array([-15.81378301, -17.48005479]), array([ 4.09509284,  5.43022322]), array([-49.76008815, -46.75370686])]]

Process finished with exit code 0

我希望看到的至少是:

No neutrons generated for neutron 1
No neutrons generated for neutron 2
No neutrons generated for neutron 3
No neutrons generated for neutron 1
No neutrons generated for neutron 2
No neutrons generated for neutron 3
No neutrons generated for neutron 1
No neutrons generated for neutron 2
No neutrons generated for neutron 3
No neutrons generated for neutron 1
No neutrons generated for neutron 2
No neutrons generated for neutron 3
No neutrons generated for neutron 1
No neutrons generated for neutron 2
No neutrons generated for neutron 3
No neutrons generated for neutron 1
No neutrons generated for neutron 2
No neutrons generated for neutron 3
No neutrons generated for neutron 1
No neutrons generated for neutron 2
No neutrons generated for neutron 3

最终,我们很高兴看到:

No neutrons generated for neutron 1
No neutrons generated for neutron 2
No neutrons generated for neutron 3
No neutrons generated for neutron 4
No neutrons generated for neutron 5
No neutrons generated for neutron 6
No neutrons generated for neutron 7
No neutrons generated for neutron 8
No neutrons generated for neutron 9
No neutrons generated for neutron 10
No neutrons generated for neutron 11
No neutrons generated for neutron 12
No neutrons generated for neutron 13
No neutrons generated for neutron 14
No neutrons generated for neutron 15
No neutrons generated for neutron 16
No neutrons generated for neutron 17
No neutrons generated for neutron 18
No neutrons generated for neutron 19
No neutrons generated for neutron 20
No neutrons generated for neutron 21

如果你注意到块2中的打印阵列,它们在不应该重复的时候重复,也就是说,没有阵列应该重复自身,每个中子的阵列应该是唯一的


Tags: norunintestfordatajobsrange