zoukankan      html  css  js  c++  java
  • 使用共享变量停止子进程

    /*使用共享变量停止子进程*/
    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))    
    

      

      

  • 相关阅读:
    软件性能测试
    我为何转来博客园
    【5】查询练习:DISTINCT、Between...and...、in、order by、count
    第5章:pandas入门【3】汇总和计算描述
    【4】建点表,填点数
    【3】数据库三大设计范式
    【2】约束
    【1】基本操作
    第5章:pandas入门【2】基本功能
    第5章:pandas入门【1】Series与DataFrame
  • 原文地址:https://www.cnblogs.com/qtnt/p/12495384.html
Copyright © 2011-2022 走看看