Remind-You Part1. 多进程控制
原理说明
在Remind-You中,每个plugin都对应着一个进程。主进程在启动后,从配置文件中读取当前有多少个插件。并依次启动这些插件。后续plugin进程退出后,主进程都会重新生成plugin进程。
代码位置
可以在github上找到第一天的代码。https://github.com/bymzy/remind-you/tree/day1
文件结构
[root@bymzy remind-you]# tree
.
├── __init__.py
├── main.py
├── plugins
│ ├── conf.json
│ ├── dict_plugin.py
│ ├── dict_plugin.pyc
│ ├── __init__.py
│ └── __init__.pyc
├── scheduler.py
├── scheduler.pyc
└── setup.py
在第一天的工作中,比较重要的文件有,main.py, scheduler.py, dict_plugin.py以及conf.json。启动conf.json需要被拷贝到/etc/scheduler.py。
依赖的环境及库
使用python2.7运行。
- mulitprocessing
该库提供了方法,可以一某个函数为目标,生成一个进程执行。返回的进程对象,的start方法用来启动该进程;is_alive方法用来判断进程是否已经退出。process = multiprocessing.Process(target=func, args=(arg)) process.start() process.is_alive()
- importlib
在Remind-You中,需要支持动态的添加插件。使用importlib可以根据字符串导入lib。module = importlib('dict_plugin.py')
主要代码
CONF_FILE = '/etc/scheduler.conf'def parse_config(conf):with open(conf, 'r') as f:data = f.read()return json.loads(data)def run_plugin(plugin):name = plugin.get('name')fileName = plugin.get('fileName')desc = plugin.get('desc')arg = plugin.get('args')module = importlib.import_module('plugins.' + fileName)process = multiprocessing.Process(target=module.run, args=(arg,))process.start()return processdef scheduler_loop():print 'main process pid: %u' % os.getpid()conf_dict = parse_config(CONF_FILE)process_list = []for plugin in conf_dict.get('plugins', []):process_list.append((plugin, run_plugin(plugin)))# monitor process while True:to_add = []to_del = []for proc in process_list:if not proc[1].is_alive():proc[1].join()to_add.append((proc[0], run_plugin(proc[0])))to_del.append(proc)for proc in to_del:process_list.remove(proc)to_del = []for proc in to_add:process_list.append(proc)to_add = []time.sleep(2)
dict_plugin.py 代码示例
import time
import os
import requestsdef run(args):print 'my pid is: %u ' % os.getpid()time.sleep(3)
plugin代码比较简单,只有一个run函数打印自己的pid,然后等待3s退出。这样做事为了模拟,主进程将plugin进程拉起的情况。
配置文件示例
{"plugins": [{ "name": "dict","desc": "help you remember English words","fileName": "dict_plugin","args": "test"} ]
}
代码说明
- 在main.py中,执行scheduler_loop()方法。这个方法首先从配置文件中读取所有的插件。当前只有一个dict插件,插件fileName字段描述有该插件代码所在的文件,插件代码中默认的run函数为插件的运行函数。
- 使用importlib将插件import进主进程,然后使用multiprocessing.Process生成一个新的进程并调用Start启动。
- 主进程当前页比较简单,循环的判断插件进程是否退出。如果退出,则继续生成一个插件进程。
最终执行效果如下
执行main.py后,插件进程定时退出,然后重新被拉起。
Remind-You Part1. 多进程控制相关推荐
- python多进程控制gui界面_Python优雅地终止了多进程和gui进程
我使用glade作为我的gui并创建一个进程来运行我的gui.单击此应用程序将打开套接字.当我按下'send'时,它将把textfield中的任何内容发送到套接字.套接字接收这些数据并将其发回.问题是 ...
- Expect 教程中文版
原文链接 本教程由*葫芦娃*翻译,并做了适当的修改,可以自由的用于非商业目的. [BUG] 有不少部分,翻译的时候不能作到"信,达".当然了,任何时候都没有做到"雅&qu ...
- 当代研究生应当掌握的5种Pytorch并行训练方法(单机多卡)
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨纵横@知乎 来源丨https://zhuanlan.zhihu ...
- 实践教程|PyTorch训练加速技巧
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨用什么名字没那么重要@知乎(已授权) 来源丨https://z ...
- 收藏 | PyTorch 单机多卡操作总结
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨科技猛兽@知乎 来源丨https://zhuanlan ...
- shell-脚本入门【转】
阅读目录 2.3.4 参数扩展--正则表达式 转自:http://blog.csdn.net/gexiaobaohelloworld/article/details/7973846 版权声明:本文为博 ...
- shell-脚本入门
http://www.blogjava.net/liubowu/archive/2007/06/25/99317.html 1 Shell环境设置 1.1 登陆欢迎信息 终端机接口 (tty1 ~ t ...
- Linux shell 交互式编程、TCL/TK 和 Expect 编译与安装、expect 编程
以下文章资源都来源于网络,保留原作者的一切权利: Expect 被用来进行一些需要进行交互是shell 编程的,比如完成ssh 自动登录,就可以使用 expect 编程来实现 1,获取原始的tcl源码 ...
- 工作流模式的学习与总结
工作流模式的学习与总结 概念: 2 工作流的具体应用 2 工作流的审批模式 3 工作流的分类 3 Basic Control Flow Patterns 3 1.顺序(S ...
最新文章
- 关于我的Android 博客
- 实用的IDE工具助力你学好Python
- SAP BRF+ Interpretation模式与Generation模式的区别
- 360公布权威机构对扣扣保镖的测试报告
- vue-router 路由跳转
- Maven - 依赖冲突
- 网页百度地图api,支持位置偏移
- 数据库主从数据一致性的几种解决方案
- Baxter实战 (四)ubuntu14.04安装kinect V2
- OV7725摄像头模块SCCB通信
- 用计算机怎么安装新思路软件,新思路计算机二级
- PS-第七天-图层混合模式及图层蒙版
- 歌曲:酒干倘卖无 背后的故事
- Ubuntu17.04系统安装必备软件与存在的问题
- 基于学术研究下载NOAA气象雷达资料的详细步骤
- 音频(二) 基音周期与共振峰
- android蓝牙浅析
- python excel处理重复行并统计个数_python统计一个文本中重复行数的方法
- 电话机漏电流大引起电话交换机振铃
- 软件复用及构件、C/S与B/S混合模型及实战项目技术简述
热门文章
- AutoLisp的扩展函数记录
- Bug[5] 多路连接客户服务器,发送一路数据时,其他几路自动断开,查询PDP显示未被激活
- ASP.NET Identity 三(转载)
- Android中 onTouchEvent() 与 onInterceptTouchEvent()事件的区别详解
- 计算机网络 自定向下方法1.1-1.2
- 存储过程基本语法结构
- 量子力学的群星闪耀时
- 宝塔控制面板安装禅道开源版教程
- 史上最科学的AI算命研究,3万张自拍揭露长相与性格关系:颜值即命
- Java使用apache.http.client.fluent快速构建HTTP请求