|
发表于 2020-8-6 12:19:43
|
显示全部楼层
本帖最后由 bangbang-ande 于 2020-8-6 12:21 编辑
我觉得应该是这样的:
首先主进程执行了:
- # Initialization phase
- print('Initialize', os.getpid(), os.getpid())
- print(__name__, os.getpid(), os.getpid())
复制代码
然后执行了之后就进入判断是否是主进程
接着生成子进程,进行执行
而子进程同时执行了两个部分:
1:v函数:
- def v():
- print('Run', os.getpid())
- print(__name__, os.getpid())
复制代码
2:# Initialization phase
- # Initialization phase
- print('Initialize', os.getpid(), os.getpid())
- print(__name__, os.getpid(), os.getpid())
复制代码
但由于时间原因,所以看到的次序反过来了,先看到了2的结果,然后看到1的结果(2和1指上边两段程序)
而处理方法是直接把
- # Initialization phase
- print('Initialize', os.getpid(), os.getpid())
- print(__name__, os.getpid(), os.getpid())
复制代码
移到
- if __name__ == '__main__':
- # 把Initialization phase这段代码移到这
- p = mp.Process(target=v)
- p.start()
- p.join()
复制代码
里边
就应该是这样:
- import multiprocessing as mp
- import os
- # Run phase
- def v():
- print('Run', os.getpid())
- print(__name__, os.getpid())
- # Initialization phase
- if __name__ == '__main__':
- print('Initialize', os.getpid(), os.getpid())
- print(__name__, os.getpid(), os.getpid())
- # start a new Process to execute function `v` and wait for it
- p = mp.Process(target=v)
- p.start()
- p.join()
复制代码
(我没学那么透,但分析了代码,应该是这样。。。)
没错的话记得设置为最佳答案 |
|