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()
    
  • 相关阅读:
    [转载]自定义Behavior 实现Listbox自动滚动到选中项
    [转载]使用Express3.0实现<Node.js开发指南>中的微博系统
    【转载】Node.js + Express 多个 Layout 文件应用
    [转载]node.js之 express框架+ejs模板 windows下建站点
    微软中国软件下载中心
    {转载}【真正的Expression Blend实战开发技巧】
    [转载]WPF窗口跳转及window和page区别
    paip.java c++得到当前类,方法名称以及行号
    paip.简化字手写参考二简字..共98个
    paip.文件读写api php java python总结.txt
  • 原文地址:https://www.cnblogs.com/BxScope/p/11000552.html
Copyright © 2011-2022 走看看