鱼C论坛

 找回密码
 立即注册
查看: 3795|回复: 6

[已解决]python创建进程问题求助

[复制链接]
发表于 2022-12-14 17:09:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. from multiprocessing import Process
  2. import time

  3. class MyProcess(Process):
  4.     def __init__(self,loop):
  5.         Process.__init__(self)
  6.         self.loop = loop

  7.     def run(self):
  8.         for count in range(self.loop):
  9.             time.sleep(1)
  10.             print(f'Pid:{self.pid} LoopCount: {count}')
  11. if __name__ == '__main__':
  12.     for i in range(2,5):
  13.         p = MyProcess(i)
  14.         p.start()
复制代码


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

执行结果如下
  1. Pid:93640 LoopCount: 0
  2. Pid:95944 LoopCount: 0
  3. Pid:79292 LoopCount: 0
  4. Pid:93640 LoopCount: 1
  5. Pid:95944 LoopCount: 1
  6. Pid:79292 LoopCount: 1
  7. Pid:95944 LoopCount: 2
  8. Pid:79292 LoopCount: 2
  9. Pid:79292 LoopCount: 3
复制代码
最佳答案
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()
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-15 08:42:32 | 显示全部楼层
具体哪里不懂?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-15 09:55:50 | 显示全部楼层

就是这里的这里的self.loop表示的是什么呀,它的作用是?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-15 10:08:43 | 显示全部楼层
是肥宅SRP啊 发表于 2022-12-15 09:55
就是这里的这里的self.loop表示的是什么呀,它的作用是?

sleep次数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-15 11:22:11 | 显示全部楼层

那为什么么输出的时候那个loopcount不是按照0 1 0 1 2 0 1 2 3,而实0 0 0 1 1 1 2 2 3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-15 20:49:34 | 显示全部楼层
suchocolate 发表于 2022-12-15 12:06
1)因为没有join,多进程并行
2)3个进程一起开始循环,从0开始:
  p1:0,1

OKOK,我明白了谢谢~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 15:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表