zoukankan      html  css  js  c++  java
  • python之系统编程 --进程

    1.调试(PDB)

    代码:

    [root@master gaoji]# vim test2.py
      1 #!/usr/local/bin/python3
      2 # -*- coding:utf-8 -*-
      3 
      4 def getAverage(a,b):
      5     result = a + b
      6     print("result=%d" %result)
      7     return result
      8 
      9 a = 100
     10 b = 200
     11 c = a + b
     12 ret = getAverage(a,b)
     13 print(ret)
    [root@master gaoji]# python3 -m pdb test2.py 
    > /home/weixin/gaoji/test2.py(4)<module>()
    -> def getAverage(a,b):
    (Pdb) l
      1     #!/usr/local/bin/python3
      2     # -*- coding:utf-8 -*-
      3  
      4  -> def getAverage(a,b):
      5         result = a + b
      6         print("result=%d" %result)
      7         return result
      8  
      9     a = 100
     10     b = 200
     11     c = a + b
    (Pdb) 

    ################################进程########################

    多任务理解:

     ##########父进程与子进程的先后顺序理解################

    [root@master process]# vim 01-进程.py     
      1 #!/usr/local/bin/python3
      2 # -*- coding:utf-8 -*-
      3 
      4 import os
      5 import time
      6 ret = os.fork()
      7 
      8 if ret == 0:
      9     print('---子进程1---')
     10     time.sleep(5)
     11     print('---子进程2---')
     12 else:
     13     print('---父进程---')
     14     time.sleep(3)
     15 
     16 print('---over---')

    执行结果:

    总结下:ret 的值有两个,一个是等于0,一个是大于0;说白点就是执行了两遍

    #################全局变量在多进程中不共享##############

    [root@master 进程]# vim 02-进程.py     
      1 #!/usr/local/bin/python3
      2 # -*- coding:utf-8 -*-
      3 
      4 
      5 import os-
      6 import time
      7 g_sum = 100
      8 
      9 pid = os.fork()
     10 if pid == 0:
     11     print('---process-01---')
     12     g_sum += 1
     13     print('---process-01--%d' %g_sum)
     14 else:
     15     time.sleep(3)                    ###为了保证让子进程优先运行
     16     print('---process-02---')
     17     print('---process-02--%d' %g_sum)
     18 

    执行结果:

    [root@master 进程]# python3 02-进程.py 
    ---process-01---
    ---process-01--101
    ---process-02---
    ---process-02--100        ###结果还是100,并没与变成101

     #############多个fork###########

    代码:

    [root@master process]# cat 01-进程.py 
    #!/usr/local/bin/python3
    # -*- coding:utf-8 -*-
    
    import os
    import time
    
    ret = os.fork()
    if ret == 0:
        print('---1---')
    else:
        print('---2---')
    
    
    ret = os.fork()
    if ret == 0:
        print('---11---')
    else:
        print('---22---')

    ####最后一共有四个进程#####

    执行结果:

    [root@master process]# python3 01-进程.py 
    ---2---
    ---22---
    ---11---
    ---1---
    ---22---
    ---11---

    另外一种:

    执行结果:

    [root@master process]# python3  01-进程.py    
    ---2---
    ---22---
    ---11---
    ---1---

    ##########多个fork2#################

    执行结果:

    [root@master process]# python3 03-进程.py 
    ---1---
    ---1---
    ---1---
    ---1---
    ---1---
    ---1---
    ---1---
    ---1---
    [root@master process]# python3 03-进程.py |wc -l
    8

     ###########fork炸弹(千万别玩这个,等于自杀)##########

     #!/usr/local/bin/python3
      2 # -*- coding:utf-8 -*-
      3 
      4 
      5 import os-
      6 
      7 os.fork()
      8 os.fork()
      9 
     10 while True:
     11     os.fork()

    ##########process创建子进程(这个可以跨平台,比fork好用,推荐使用)############

    [root@master process]# vim 04-process子进程.py     
      1 #!/usr/local/bin/python3
      2 # -*- coding:utf-8 -*-
      3 
      4 
      5 from  multiprocessing import Process
      6 
      7 import time
      8 def test():
      9     while True:
     10         print('---test---')
     11         time.sleep(1)
     12 
     13 p = Process(target=test)  ###创建子进程
     14 p.start()          ###让这个进程开始执行test函数
     15 
     16 while True:
     17     print('---main---')
     18     time.sleep(1)

    执行结果:

    [root@master process]# python3 04-process子进程.py   ###主进程去执行---main---,子进程去执行test()函数
    ---main---
    ---test---
    ---main---
    ---test---
    ---main---
    ---test---
    ---main---
    ---test---
    ---main---
    ---test---
    ---main---
    ---test---

    ####################通过process 创建的子进程,主进程会等待子进程的结束(fork 不会等待)###########

    [root@master process]# vim 05-process子进程.py
      1 #!/usr/local/bin/python3
      2 # -*- coding:utf-8 -*-
      3 
      4 
      5 from  multiprocessing import Process
      6 
      7 import time
      8 def test():
      9     for i in range(4):
     10         print('---test---')
     11         time.sleep(1)
     12 
     13 p = Process(target=test)
     14 p.start()
     15 
     16 print('---11---')

    执行结果:

    [root@master process]# python3 05-process子进程.py
    ---11---
    ---test---
    ---test---
    ---test---
    ---test---
    [root@master process]#      ###在子进程所有执行完才出现[root@master process]#  说明,是主进程在等待子进程的结束

    ############join 的作用#################

    ###如果想让子进程的语句执行完再执行主进程的语句####

    [root@master process]# vim 05-process子进程.py    
      1 #!/usr/local/bin/python3
      2 # -*- coding:utf-8 -*-
      3 
      4 
      5 from  multiprocessing import Process
      6 
      7 import time
      8 import random
      9 def test():
     10     for i in range(random.randint(1,5)):
     11         print('---test---')
     12         time.sleep(1)
     13 
     14 p = Process(target=test)
     15 p.start()
     16 p.join()      ###称为堵塞
     17 print('---main---')

    执行结果:

    [root@master process]# python3 05-process子进程.py
    ---test---
    ---main---
    [root@master process]# python3 05-process子进程.py
    ---test---
    ---test---
    ---main---         ####‘---main---’总是在子进程执行完才执行主进程,主要是join这个方法

    #############通过process 的子类创建子进程############

    [root@master process]# vim 06-process子进程.py     
      1 #!/usr/local/bin/python3
      2 # -*- coding:utf-8 -*-
      3 
      4 
      5 from multiprocessing import Process
      6 
      7 import time
      8 class Process_zilei(Process):           ####通过继承父类,父类一定有start()方法,start()方法里面会调用run方法,通过方法重写run方法
      9     def run(self):
     10         while True:
     11             print('---1---')
     12             time.sleep(1)
     13 
     14 p = Process_zilei()
     15 p.start()
     16 
     17 
     18 while True:
     19     print('---main---')
     20     time.sleep(1)

    ##############进程池(多任务,一般都试用这种方法)################

    池一般是缓冲用的

     

     ##############进程间通信-queue队列####################

  • 相关阅读:
    汉明距离
    Go_go build 和 go install
    rabbitmq的简单介绍二
    rabbitmq的简单介绍一
    redis的订阅和发布
    python操作redis
    vmware虚拟机开机报附件中的错误的解决办法
    使用twised实现一个EchoServer
    python事件驱动的小例子
    mysql数据库的最基本的命令
  • 原文地址:https://www.cnblogs.com/shanhua-fu/p/7727931.html
Copyright © 2011-2022 走看看