zoukankan      html  css  js  c++  java
  • Python多线程的几种实现方式

    Python threading模块中Thread类常用的三种创建线程方法

    • 创建Thread的实例,传递给它一个函数
    • 创建Thread的实例,传递给它一个可调用的类实例
    • 派生Thread的子类,并创建子类的实例

    创建Thread的实例,传递给它一个函数

    import threading
    from time import ctime, sleep
    
    loops = [4, 6]
    
    
    def loop(nloop, nsec):
        print('start loop', nloop, 'at:', ctime())
        sleep(nsec)
        print('loop', nloop, 'done at:', ctime())
    
        
    def main():
        print('starting at:', ctime())
        threads = []
        nloops = range(len(loops))
    
        for i in nloops:
            t = threading.Thread(target=loop, args=(i, loops[i]))
            threads.append(t)
    
        for i in nloops:
            threads[i].start()
    
        for i in nloops:
            threads[i].join()
    
        print('all done at:', ctime())
    
        
    if __name__ == '__main__':
        main()
    
    

    创建Thread的实例,传递给它一个可调用的类实例

    import threading
    from time import ctime, sleep
    
    loops = [4, 2]
    
    
    class ThreadFunc(object):
        def __init__(self, func, args, name=''):
            self.name = name
            self.func = func
            self.args = args
    
        def __call__(self, *args, **kwargs):
            self.func(*self.args)
    
    
    def loop(nloop, nsec):
        print('start loop', nloop, 'at:', ctime())
        sleep(nsec)
        print('loop', nloop, 'done at:', ctime())
    
    
    def main():
        print('starting at:', ctime())
        threads = []
        nloops = range(len(loops))
    
        for i in nloops:
            t = threading.Thread(target=ThreadFunc(loop, (i, loops[i]), loop.__name__))
            threads.append(t)
    
        for i in nloops:
            threads[i].start()
    
        for i in nloops:
            threads[i].join()
    
        print('all done at:', ctime())
    
    
    if __name__ == '__main__':
        main()
    
    

    派生Thread的子类,并创建子类的实例

    import threading
    from time import ctime,sleep
    
    loops = [4, 2]
    
    
    class MyThread(threading.Thread):
        def __init__(self, func, args, name=''):
            super().__init__()
            self.name = name
            self.func = func
            self.args = args
    
        def run(self):
            self.func(*self.args)
    
    
    def loop(nloop, nsec):
        print('start loop', nloop, 'at:', ctime())
        sleep(nsec)
        print('loop', nloop, 'done at:', ctime())
    
    
    def main():
        print('starting at:', ctime())
        threads = []
        nloops = range(len(loops))
    
        for i in nloops:
            t = MyThread(loop, (i, loops[i]), loop.__name__)
            threads.append(t)
    
        for i in nloops:
            threads[i].start()
    
        for i in nloops:
            threads[i].join()
    
        print('all done at:', ctime())
    
    
    if __name__ == '__main__':
        main()
    
  • 相关阅读:
    OSI安全体系结构
    PHP 二维数组根据相同的值进行合并
    Java实现 LeetCode 17 电话号码的字母组合
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 14 最长公共前缀
  • 原文地址:https://www.cnblogs.com/BxScope/p/11000552.html
Copyright © 2011-2022 走看看