zoukankan      html  css  js  c++  java
  • 创建进程的两种方式 进程对象及其他方法 守护进程 进程间数据是隔离的 join方法

    创建进程的两种方式   

    # 创建进程的第一种方法
    from multiprocessing import Process
    import time
    
    def test(name):
        print('%s is running'% name)
        time.sleep(3)
        print('%s is over' %name)
    # window创建进程会将代码以模块的方式  从上往下执行一遍
    # linux会直接将代码完完整整的拷贝一份
    
    # windows创建进程一定要在if __name__ == '__main__': 代码块内创建  否则报错
    
    if __name__ == '__main__':
        p = Process(target=test,args=('james',))
        p.start()
        print('主程序')
    
    '''
    创建进程就是在内从中重新开辟一块内存空间
    将允许产生的代码块丢进去
    一个进程对应在内存就是一块独立的空间
    
    进程与进程之间的数据是隔离的  无法直接交互
    但是可以通过某些技术实现间接交互
    '''
    
    # 创建进程的第二种方式
    from multiprocessing import Process
    import time
    
    class MyProcess(Process):
        def __init__(self,name):
            super().__init__()
            self.name = name
    
        def run(self):
            print('%s is running' %self.name)
            time.sleep(3)
            print('%s is over' %self.name)
    
    if __name__ == '__main__':
        p = MyProcess('james')
        p.start()
        print('主程序')

    进程对象及其他方法 

    from multiprocessing import Process
    import os
    import time
    
    def test(name):
        print('%s is running'% name ,'子进程%s'%os.getpid(),'父进程%s'%os.getppid())
        time.sleep(3)
        print('%s is over'%name)
    
    if __name__ == '__main__':
        p = Process(target=test,args=('james',))
        p.start()
        p.terminate()
        time.sleep(0.1)
        print(p.is_alive())
    
        print('主程序',os.getpid(),'主主进程%s'%os.getppid())

    守护进程   

    from multiprocessing import Process
    import time
    
    def test(name):
        print('%s还正常活着'%name)
        time.sleep(3)
        print('%s 这个人没了,说没就没了'%name)
    
    if __name__ == '__main__':
        p = Process(target=test,args=('james',))
        p.daemon = True
        p.start()
        time.sleep(0.1)
        print('这小子终于死了')

    join方法  

    from multiprocessing import Process
    import time
    
    def test(name,i):
        print('%s is running'%name)
        time.sleep(i)
        print('%s is over'%name)
    
    
    if __name__ == '__main__':
        p_list = []
    
        p = Process(target=test,args=('james,1'))
        p1 = Process(target=test,args=('koby,1'))
        p2 = Process(target=test,args=('love,1'))
        start_time = time.time()
        p.start()
        p1.start()
        p2.start()
    
        p.join()
        p1.join()
        p2.join()
    
    
    # 主程代码等待子进程运行结束  才继续进行
    # p.join()   # 主进程代码等待子进程运行结束
        print('主程序')
        print(time.time()-start_time)

    进程间数据是隔离的   

    from multiprocessing import Process
    import time
    
    
    money = 100
    
    def test():
        global money
        money = 99999999
    
    
    if __name__ == '__main__':
        p = Process(target=test)
        p.start()
        p.join()
        print(money)

    互斥锁


    传建一个文件 data
    文件内容
    {"ticket": 5}



    from
    multiprocessing import Process,Lock import time import json #查票 def search(i): with open('data','r',encoding='utf-8') as f: data = f.read() t_d = json.loads(data) print('用户%s查询余票为%s'%(i,t_d.get('ticket'))) # 买票 def buy(i): with open('data','r',encoding='utf-8') as f: data = f.read() t_d = json.loads(data) time.sleep(1) if t_d.get('ticket') > 0: # 票数减一 t_d['ticket'] -= 1 # 更新票数 with open('data','w',encoding='utf-8') as f: json.dump(t_d,f) print('用户%s抢票成功'%i) else: print('没票了') def run(i,mutex): search(i) mutex.acquire() # 抢锁 buy(i) mutex.release() # 释放锁 if __name__ == '__main__': mutex = Lock() for i in range(10): p = Process(target=run,args=(i,mutex)) p.start()

     

  • 相关阅读:
    Balder 3D开发系列之创建基本动画
    Expression Blend 的点滴(1)ListBox华丽大变身
    Balder 3D开发系列之创建天空盒
    Balder 3D开发系列之创建自己的primitives
    silverlight 中的应用程序库缓存
    Balder 3D开发系列之——sprite结合Camera旋转木马特效
    VisualTreeHelper不仅仅只是用来查看可视化树结构的
    Balder 3D开发系列之与Sprite初次相遇
    Balder 3D开发系列之给自定义基本体进行贴图操作
    【图解】通过Expression Blend快速制作具有物理效果的动画游戏
  • 原文地址:https://www.cnblogs.com/xuzhaolong/p/11340789.html
Copyright © 2011-2022 走看看