[Python]第五课笔记 --多进程及守护进程编写
2013-04-10 18:06
357 查看
#python2.7 多进程多线程
#并行的世界
*串行和并行 *阻塞与非阻塞 *共享和冲突 *多进程和多线程:win下不支持多进程开发,多线程几乎所有的平台都可以开发#多进程
*fork *wait *waitpid *pipe and singal(进程间通信)?守护进程是什么##########################fork演示#########################coding=utf-8#python2.7'''多进程编程 fork wait waitpid pipe signle'''import osimport signal #怎么用的from time import ctime,sleepdef dealSigle(a,b):print 'game over'signal.signal(signal.SIGTERM,dealSigle)def myfork():r,w = os.pipe() #管道的原理和使用?pid = os.fork()#pid = os.fork()#print 'pid is %s' %pida = 1 #judge in which processif pid==0:os.close(r)w = os.fdopen(w,'w')print 'this is child %s--%s--%s'%(pid,os.getpid(),os.getppid()) #直接打印子进程,父进程#sleep(1)print a+1if a == 1:os.kill(os.getpid,signal.SIGTERM)w.write('woshi haoren')w.close()else:os.wait()os.close(w)r = os.fdopen(r)print r.read()r.close()#print os.waitpid(pid,0) #为什么会输出2次呢?print 'thss is parent %s--%s--%s'%(pid,os.getpid(),os.getppid())print aif __name__=='__main__':myfork()########################################################################
守护进程的编写流程;
*首先fork一个子进程,让父进程退出,把控制权还给命令行或者是shell *ssetsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录 会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。 *再次fork,这样的话父进程回话组长或者进程组长退出。子进程是一个非会话组头领进程,永远无法获得终端控制。 *调用chdir()确认进程不保持任何目录于使用状态。 *进程从创建它的父进程那里继承了文件创建掩模。它可能修改守护进程所创建的文件的存取位。为防止这一点,将文件创建掩模清除:umask(0);#coding=utf8#python2.7 参考cookbookimport os,sysdef guardtest(stdin='/dev/null',stdout='/dev/null',stderr='/dev/null'):#首次forktry:pid = os.fork()if pid>0:sys.exit(0)except IOError,e:e.messagesys.exit(1)#从母体分离os.chdir('/')os.setsid()os.umask(0)#第二次forktry:pid = os.fork()if pid>0:sys.exit(0)except OSError,e:sys.exit(1)#完成守护了for f in sys.stdout,sys.stderr:f.flush()si = file(stdin,'r')so = file(stdout,'a+')se = file(stderr,'a+',0)os.dup2(si.fileno(),sys.stdin.fileno())os.dup2(so.fileno(),sys.stdout.fileno())os.dup2(se.fileno(),sys.stderr.fileno())def mains():import timesys.stdout.write('the input sid is %d'%os.getpid())sys.stdout.write('output wirtor')sys.stderr.write('err wirtor')c = 0for i in range(100):sys.stdout.write('No %d and time is %s \n'%(c,time.ctime()))sys.stdout.flush()c+=1if __name__=='__main__':guardtest('/dev/null','/tmp/deamon.log','/tmp/deamon.log')mains()
相关文章推荐
- [Python]第五课笔记 --多进程及守护进程编写
- Python实现Linux下守护进程的编写方法
- linux下python守护进程编写和原理理解
- 使用Python编写Linux系统守护进程实例
- Python 编写windows守护进程程序
- python下编写守护进程
- 用python编写Linux守护进程
- python学习笔记——守护进程
- linux下python守护进程编写和原理理解
- Python:Linux下守护进程编写
- python编写借助linux中的xinetd守护进程实现我们的网络程序(select、重定向标准输入输出)
- linux下python守护进程编写和原理理解
- python学习笔记——线程threading (二)重写run()方法和守护进程daemon()
- python守护进程编写
- linux下python守护进程编写和原理理解
- 用Python给Linux编写守护进程
- python爬虫:编写多进程爬虫学习笔记
- python编写守护进程
- 用python编写守护进程
- linux下python守护进程编写和原理理解