嗯哪,说说需要做守候进程的时候,我是怎么进化到高端的。(怎么高端,具体自己定义,我的土,说不定就是你妹的高端)

最土的,也是最基本的python deamon的思路:


1.进程脱离父进程及终端绑定,如果不这样的话,主进程退出,派生的子进程也跟着倒霉了。脱离终端也是这个理。

2.进程唯一性保证,这是废话

3.标准输入/输出/错误重定向,为了不让错误打到前面,又为了更好的分析数据。

说的洋气点、nb点、细化点(其实就os的关键三个动作):


os.chdir(“/”)  将当前工作目录更改为根目录。从父进程继承过来的当前工作目录可能在一个装配的文件系统中。

os.setsid() 调用 setsid 以创建一个新对话期,创建了一个独立于当前会话的进程。

os.umask(0) 重设文件创建掩码,子进程会从父进程继承所有权限,可以通过调用这个方法将文件创建掩码初始化成系统默认。


哎,提示下我的原文地址是, blog.xiaorui.cc


     记得刚做运维那会,要实现售后进程用的还是shell的手段,nohup 重定向到一个log文件里面。  具体怎么用,我估计大家都懂,别问我,我怕我干掉你。

nohup xxxx  xxxx &


紧接着用python的subprocess模块,来fork daemon进程,然后自己退出来。  这样也是实现了守候进程。 subprocess  派生了子进程后。由于用subprocess可以拿到他的子进程的pid,这样他就可以有效的控制子进程,比如kill,挂起。

然后的然后,在学习python的服务端一大利器 twisted的时候,他本身也可以做守候进程的。当然方法有些局限,仅仅适合依照twisted为左右的网络编程。

上面介绍了很多的方法,但是不管是python、golang、ruby社区用supervisor做进程管理的居多。原因,够简单,够直白。  supervisor配置文件是相当的丰富,他还有supervisorctl 终端管理器,更有web 管理界面 。   对我来说,supervisor tornado 绝配。

这段时间找到了一个好模块,pip install daemonize 

这是我写的关于 daemonize demo例子,大家可以直接跑跑。 之后,可以看到,我虽然死循环了,但是后台的服务器还是一直跑着,可以通过进程的状态,或者是通过daemonize本身的函数接口获取状态。

他的源码实现方式:  

不多说了,就是fork fork fork ….

使用python做守候进程服务,不知道还有没有更好点、更霸道的方法。大家有的话,要分享下,咱们一块交流下 ….



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

python实现多进程监听同一个socket的prefork服务端模型

这两天迁移数据,没时间写博客了……   正好这两天跟同事聊了下prefork模式,就拿出来聊聊。。。 如果你跟我一样是python程序员,我很建议...

阅读全文

发表评论