美文网首页
python在windows上使用多进程的坑

python在windows上使用多进程的坑

作者: 赵智雄 | 来源:发表于2018-06-25 09:40 被阅读135次

    一,python的main函数。

    一般的语言都是从main函数开始的。python有点不同,Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入时自动执行,这些代码,可以认为是Python的main函数。

    python的主函数一般都写成if __name__ == "__main__":
    当这个模块是主调用的和被调用的时候,__name__的值是不一样的,当这个模块是主调用模块的时候,__name__的值是"__main__",当这个模块被调用的时候,__name__的值是这个模块的名字。因此if __name__ == "__main__":这句话就可以起到主函数的作用。只有它是主调模块的时候才执行,被别的模块import的时候,就不会执行了。

    # -*-coding:utf-8-*-
    
    print "a.py..."
    print "__name__: " + __name__
    
    if __name__ == '__main__':
         print "__name__: " + __name__
    

    a.py

    # -*-coding:utf-8-*-
    import a as aa
    print "b.py..."
    print "__name__: " + __name__
    if __name__ == '__main__':
        print "a.__name__: " + aa.__name__
    

    b.py

    二, 多进程。

    多进程用的是multiprocessing,在windows上和linux上,实现方式不太一样。在windows上会有一个import创建进程的模块的操作,而linux上就没有。所以创建进程的操作要用if __name__ == "__main__":保护起来,否则就会递归创建进程,或者出其它什么错误。
    下面的代码在linux和windows上运行的结果就不一样。就是很简单地创建了8个进程。

    # -*-coding:utf-8-*-
    
    from multiprocessing import Process as process
    from urllib import urlretrieve
    import os
    
    def task(i):
        print 'task '+ str(i)
    
    
    def make_process():
        pn = []
        for i in range(8):
            p = process(target=task, args=(i, ))
            pn.append(p)
            p.start()
            p.join()
    print "make_process..."
    print '__name__ :  ' + __name__
    
    
    if __name__ != '__main__':
        print "我被import了。。。"
    
    make_process()
    # if __name__ == '__main__':
    #     make_process()
    

    在linux上就不会有问题,在windows上就会递归创建进程。


    linux运行结果

    相关文章

      网友评论

          本文标题:python在windows上使用多进程的坑

          本文链接:https://www.haomeiwen.com/subject/flmneftx.html