• 使用共享变量停止子进程


    /*使用共享变量停止子进程*/
    from multiprocessing import Process, Value from collections import namedtuple import time import sys s = time.time() def worker1(alive): while alive.value: time.sleep(0.5) print(sys._getframe().f_code.co_name) print("%s %s sec" % (sys._getframe().f_code.co_name, (time.time() - s))) def worker2(alive): while alive.value: time.sleep(1) print(sys._getframe().f_code.co_name) print("%s %s sec" % (sys._getframe().f_code.co_name, (time.time() - s))) def worker3(alive): while alive.value: time.sleep(1) print("%s %s sec" % (sys._getframe().f_code.co_name, (time.time() - s))) def process(workerlist): plist = [] alive = Value('b', False) alive.value = True for worker in workerlist: p = Process(target=worker.function, args=(alive,)) plist.append((p,worker.timeout)) p.start() print("%s %s sec" % (sys._getframe().f_code.co_name, (time.time() - s))) for p,timeout in plist: p.join(timeout) alive.value = False if __name__ == '__main__': Worker = namedtuple('Worker','function timeout') workerlist = [Worker(worker1, 2), Worker(worker2, 2), Worker(worker3, 3),] s = time.time() process(workerlist) print("end %s sec" % (time.time() - s))
    from multiprocessing import Process, Value, Manager
    from collections import namedtuple
    import time
    import sys
    class T():
    
        def worker1(self, alive, s, return_dict):
          while alive.value:
            time.sleep(0.5)
            print(sys._getframe().f_code.co_name)
            func = sys._getframe().f_code.co_name
            print("%s %s sec" % (func, (time.time() - s)))
            if (time.time() - s)>2:
                return_dict[func] = '1'
                return return_dict
    
        def worker2(self, alive, s, return_dict):
          while alive.value:
            time.sleep(1)
            print(sys._getframe().f_code.co_name)
            func = sys._getframe().f_code.co_name
            print("%s %s sec" % (func, (time.time() - s)))
            if (time.time() - s)>2:
                return_dict[func] = '2'
                return return_dict
    
        def worker3(self, alive, s, return_dict):
          while alive.value:
            time.sleep(1)
            func = sys._getframe().f_code.co_name
            print("%s %s sec" % (func, (time.time() - s)))
            if (time.time() - s)>5:
                return_dict[func] = '3'
                return return_dict
    
        def process(self):
            manager = Manager()
            return_dict = manager.dict()
            s = time.time()
            Worker = namedtuple('Worker', 'function timeout')
            workerlist = [Worker(self.worker1, 10),
                          Worker(self.worker2, 20),
                          Worker(self.worker3, 30), ]
            plist = []
            alive = Value('b', False)
            alive.value = True
            for worker in workerlist:
                p = Process(target=worker.function, args=(alive,s,return_dict))
                plist.append((p,worker.timeout))
                p.start()
            print("%s %s sec" % (sys._getframe().f_code.co_name, (time.time() - s)))
    
            for p,timeout in plist:
                p.join(timeout)
            #注意位置
            alive.value = False
            print(return_dict)
    
    if __name__ == '__main__':
        # Worker =  namedtuple('Worker','function timeout')
        # workerlist = [Worker(worker1, 2),
        #             Worker(worker2, 2),
        #             Worker(worker3, 3),]
        s = time.time()
        T().process()
        print("end %s sec" % (time.time() - s))    
    

      

      

  • 相关阅读:
    关于CSS网页布局id与class命名的问题
    JavaScript弹出层技术探讨文章收藏
    Jquery实现弹窗
    Asp.net中时间格式化的几种方法
    新建商品时,导入商品,随机文件名称的形成
    Linux问题:Crontab 执行shell脚本时相对路径的问题,不能识别。
    linux环境php扩展pdo_mysq安装l错误
    测试php代码的运行时间
    Apache的工作方式
    PHP时间处理
  • 原文地址:https://www.cnblogs.com/qtnt/p/12495384.html
Copyright © 2020-2023  润新知