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()
    
  • 相关阅读:
    JVM Inline
    Lattice
    编译技术
    sql-server-on-linux
    concurrency 方面的books
    Linux debugger lldb
    javaperformanceoptimization
    Understanding The Linux Virtual Memory Manager
    web performance tu ning
    linux io architecture
  • 原文地址:https://www.cnblogs.com/BxScope/p/11000552.html
Copyright © 2011-2022 走看看