是肥宅SRP啊 发表于 2022-12-14 17:09:20

python创建进程问题求助

from multiprocessing import Process
import time

class MyProcess(Process):
    def __init__(self,loop):
      Process.__init__(self)
      self.loop = loop

    def run(self):
      for count in range(self.loop):
            time.sleep(1)
            print(f'Pid:{self.pid} LoopCount: {count}')
if __name__ == '__main__':
    for i in range(2,5):
      p = MyProcess(i)
      p.start()

有没有老师能给我解释一下这段代码的逻辑呀 ,我理不太清

执行结果如下
Pid:93640 LoopCount: 0
Pid:95944 LoopCount: 0
Pid:79292 LoopCount: 0
Pid:93640 LoopCount: 1
Pid:95944 LoopCount: 1
Pid:79292 LoopCount: 1
Pid:95944 LoopCount: 2
Pid:79292 LoopCount: 2
Pid:79292 LoopCount: 3

suchocolate 发表于 2022-12-15 08:42:32

具体哪里不懂?

是肥宅SRP啊 发表于 2022-12-15 09:55:50

suchocolate 发表于 2022-12-15 08:42
具体哪里不懂?

就是这里的这里的self.loop表示的是什么呀,它的作用是?

suchocolate 发表于 2022-12-15 10:08:43

是肥宅SRP啊 发表于 2022-12-15 09:55
就是这里的这里的self.loop表示的是什么呀,它的作用是?

sleep次数

是肥宅SRP啊 发表于 2022-12-15 11:22:11

suchocolate 发表于 2022-12-15 10:08
sleep次数

那为什么么输出的时候那个loopcount不是按照0 1 0 1 2 0 1 2 3,而实0 0 0 1 1 1 2 2 3

suchocolate 发表于 2022-12-15 12:06:33

是肥宅SRP啊 发表于 2022-12-15 11:22
那为什么么输出的时候那个loopcount不是按照0 1 0 1 2 0 1 2 3,而实0 0 0 1 1 1 2 2 3

1)因为没有join,多进程并行
2)3个进程一起开始循环,从0开始:
p1:0,1
p2:0,1,2
p3: 0,1,2,3
3) 每轮循环,大家各自都sleep 1秒,一起完成,所以一起打印 ,就都是0.
4)想要实现你说的效果,可以去掉sleep,大概率会出现。或者p.start()后加上p.join()

是肥宅SRP啊 发表于 2022-12-15 20:49:34

suchocolate 发表于 2022-12-15 12:06
1)因为没有join,多进程并行
2)3个进程一起开始循环,从0开始:
p1:0,1


OKOK,我明白了谢谢~
页: [1]
查看完整版本: python创建进程问题求助