Chinaunix首页 | 论坛 | 博客
  • 博客访问: 55645
  • 博文数量: 16
  • 博客积分: 306
  • 博客等级: 二等列兵
  • 技术积分: 162
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-20 15:08
文章分类

全部博文(16)

文章存档

2013年(1)

2012年(15)

我的朋友

分类: Python/Ruby

2012-10-27 10:17:35

python中os.waitpid() 注意:windows操作系统中os模块中没有os.fork() 函数

一下代码为os.waitpid()用法的演示。
该程序的3个示范输出再次证明了一部并发进程不可预测的本质


点击(此处)折叠或打开

  1. import os
  2. import sys
  3. import time

  4. try :
  5.     forkPID1 = os.fork()
  6. except OSError : # 如果操作系统不能创建进程,osfork()将会发出一个OSError异常
  7.     sys.exit('Unable to create first child.')

  8. if forkPID1 != 0 :
  9.     try :
  10.         forkPID2 = os.fork()
  11.     except OSError :
  12.         sys.exit('Unable to create first child.')

  13.     if forkPID2 > 0 :
  14.         print 'Parent waiting for child precesses ...\n' + \
  15.             '\t tpid : %d , forkPID1 : %d , forkPID2 : %d' \
  16.             % ( os.getpid() , forkPID1 , forkPID2)

  17.         try :
  18.             child2 = os.waitpid (forkPID2 , 0)[0]
  19.         except OSError :
  20.             sys.exit("No child process with pid %d." %(forkPID2) )

  21.         print 'Parent Child %d finished.' % child2

  22.     elif forkPID2 == 0 :
  23.         print 'Chile2 sleeping fot 4 seconds ....\n' + \
  24.             '\tpid : %d , forkPID1: %d , forkPID2: %d' \
  25.             % (os.getpid() , forkPID1 , forkPID2 )
  26.         time.sleep(4) #规定进程保持的休眠时间 , 以秒为单位

  27. elif forkPID1 == 0 :
  28.     print 'Child1 sleeping for 2 seconds ....\n' + \
  29.         '\tpid : %d , forkPID1: %d' \
  30.         % (os.getpid() , forkPID1)
  31.     time.sleep(2)


点击(此处)折叠或打开

  1. 3个示范输出:
  2. Parent waiting for child precesses ...
  3.      tpid : 2468 , forkPID1 : 2469 , forkPID2 : 2470
  4. Child1 sleeping for 2 seconds ....
  5.     pid : 2469 , forkPID1: 0
  6. Chile2 sleeping fot 4 seconds ....
  7.     pid : 2470 , forkPID1: 2469 , forkPID2: 0
  8. Parent Child 2470 finished.

  9. Parent waiting for child precesses ...
  10.      tpid : 2465 , forkPID1 : 2466 , forkPID2 : 2467
  11. Child1 sleeping for 2 seconds ....
  12. Chile2 sleeping fot 4 seconds ....
  13.     pid : 2466 , forkPID1: 0
  14.     pid : 2467 , forkPID1: 2466 , forkPID2: 0
  15. Parent Child 2467 finished.

  16. Parent waiting for child precesses ...
  17.      tpid : 2634 , forkPID1 : 2635 , forkPID2 : 2636
  18. Child1 sleeping for 2 seconds ....
  19.     pid : 2635 , forkPID1: 0
  20. Chile2 sleeping fot 4 seconds ....
  21.     pid : 2636 , forkPID1: 2635 , forkPID2: 0
  22. Parent Child 2636 finished.

阅读(11553) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~