python多进程的坑,python在windows上使用多进程的坑

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-21 13:04   73   0

一,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上就会递归创建进程。

da902aa987ee

linux运行结果

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP