一,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运行结果
网友评论