apply_assync()执行函数外部的行

时间:2018-03-12 09:35:55

标签: python

我有一个代码:

            import multiprocessing as mp
            import time

            sym=[1,2,3,4,5,6,7,8,9,10]
            print "AAAAAAAAAAAAAAAAAAAAAAAAAAA"
            def test(c):
                print c
            gjd=0
            if __name__ == '__main__':
                    if float(gjd)<((time.time()/60)):
                        gjd=float(int(time.time() / 60) + 1)
                        zxc=time.time()
                        p = mp.Pool(processes=7)
                        for t in sym:
                            p.apply_async(test, args=(t,))
                        time.sleep(0.6)
                        p.close()
                        p.join()
                        print '----------------------------',time.time()-zxc,'----------------------------'

但是,我并不真正理解为什么行

        print "AAAAAAAAAAAAAAAAAAAAAAAAAAA"

定义的工人数量之前执行了7次
                    p = mp.Pool(processes=7)

我的代码输出是:

            AAAAAAAAAAAAAAAAAAAAAAAAAAA
            AAAAAAAAAAAAAAAAAAAAAAAAAAA
            AAAAAAAAAAAAAAAAAAAAAAAAAAA
            AAAAAAAAAAAAAAAAAAAAAAAAAAA
            AAAAAAAAAAAAAAAAAAAAAAAAAAA
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            AAAAAAAAAAAAAAAAAAAAAAAAAAA
            AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
            A
            ---------------------------- 0.858999967575 ----------------------------

            Process finished with exit code 0

如何防止在多处理池调用的函数之外执行行?

1 个答案:

答案 0 :(得分:0)

multiprocessing导入模块,因此为什么每个杂散(=函数,类或if __name__ == '__main__'之外的代码)都会执行。

要解决此问题,只需将所有内容移至函数或if __name__ == '__main__'内。

请参阅docs上的安全导入主模块

  

安全导入主模块

     

确保新模块可以安全地导入主模块   口译员没有引起意外的副作用(这样的开始a   新进程)。