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

今日综述

今天用了接近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
    评论
在Hadoop伪分布式模式下,各个进程的关系如下: 1. NameNode和DataNode:NameNode是HDFS的管理节点,负责管理文件系统的命名空和元数据信息,而DataNode则负责存储数据块和提供数据访问服务。NameNode和DataNode之通过RPC(Remote Procedure Call)进行通信,NameNode会定期向DataNode发送心跳信号,以检查DataNode是否正常工作,同时也会向DataNode发出指令,如创建、删除文件等。 2. ResourceManager和NodeManager:ResourceManager是YARN的管理节点,负责管理集群中的资源和任务调度,而NodeManager则负责在每个节点上启动和监控容器,并向ResourceManager汇报节点资源使用情况以及容器的运行状况。ResourceManager和NodeManager之通过RPC进行通信,ResourceManager会向NodeManager发送指令,如启动、停止容器等。 3. NameNode和ResourceManager:NameNode和ResourceManager之也会进行通信,主要是为了协调MapReduce任务的执行。当客户端提交MapReduce任务时,ResourceManager会向NameNode请求获取输入数据的位置信息,然后将任务分配给相应的节点进行执行。执行过程中,NameNode会向ResourceManager发送任务状态信息,以便ResourceManager进行监控和调度。 4. SecondaryNameNode和NameNode:SecondaryNameNode是NameNode的辅助节点,主要用于定期合并NameNode的编辑日志和FsImage文件,生成新的FsImage文件,以缩短NameNode的启动时。SecondaryNameNode和NameNode之通过RPC进行通信,SecondaryNameNode会向NameNode请求获取编辑日志和FsImage文件,然后进行合并。 这些进程的关系非常复杂,但是它们的协作使得Hadoop具有了高可靠性、高可扩展性和高性能的特点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值