10.4.2 可导入的目标函数
threading与multiprocessing例子之间有一个区别,multiprocessing例子中对__main__使用了额外的保护。基于启动新进程的方式,要求子进程能够导入包含目标函数的脚本。可以把应用的主要部分包装在一个__main__检查中,确保模块导入时不会在各个子进程中递归地运行。另一种方法是从一个单独的脚本导入目标函数。例如,multiprocessing_import_main.py使用了第二个模块中定义的一个工作函数。
# multiprocessing_improt_worker.py
def worker():
"""worker function"""
print('Worker')
return
import multiprocessing
import multiprocessing_import_worker
if __name__ == '__main__':
jobs = []
for i in range(5):
p = multiprocessing.Process(
target=multiprocessing_import_worker.worker,
)
jobs.append(p)
p.start()
这个工作函数在multiprocessing_improt_worker.py中定义。
调用主程序会生成第一个例子类似的输出。