【日志】进程间的互相控制

今日综述

今天用了接近1天的时间,才搞定了Python中进程间的互相控制,包含主进程与子进程之间,子进程之间。着实花费了一番心力,说明自己的功底还是太浅。

记录一下今天的坑点,备忘

  • 进程间可以共享的数据,是有要求的,比如用mutiprocess.Process()创建的进程对象,就不能作为参数直接传递给其他进程,否则报错TypeError: cannot pickle 'xxxxx' object,但pid可以,确认了pid可行后,后面直接开了绿灯,一路畅通了
  • 线程间的控制很复杂,网上有人说Python在设计中就是不允许线程间互相控制的(存疑?),但有人通过一些比较曲折的方式实现了并不太完美的效果,我觉得不是我想要的,放弃了
  • 线程间是可以共享进程的内存变量的(包含函数及变量),这看起来似乎是很有助于设计监视线程(比如,在进程中单独创建一个子线程,用于监视其他线程的状态,并根据条件去控制),但在实际中使用时,却悲催的发现,尽管监视线程可以操作很多单独并行的任务,但在它操作期间却无法暂停其他线程,当然方法并不是没有,比如通过一个变量flag记录状态,但那不适用于顺序执行的目标任务。在这上面反反复复搜索方案、尝试方案,浪费了非常多的时间
  • 最后确认了通过进程控制进程。这里又涉及两种方案
    1. 在主进程中创建两个子进程,p1中放置目标任务,p2中放置监视任务,但这样需要创建2个子进程,不是最优解
    2. 主进程中放置目标任务,在主进程中创建1个子进程去控制主进程,从资源消耗上来说是最优解,但却入了一个坑点,就是子进程必须创建在目标任务之前,否则程序将顺序执行,直到执行完目标任务,才轮到子进程start(),此时黄花菜都凉了
  • 最终选择的是multiprocess.Process()配合psutil,完成了进程间的互相控制

后记

学无止境,BUG无边。且行且长进吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值