zoukankan      html  css  js  c++  java
  • python网络编程--线程使用threading

    一:线程使用

      线程使用有两种方法,一种是直接使用,二是通过继承threading.Thread类使用

    二:函数式使用

     函数式:调用thread模块中的start_new_thread()函数来产生新线程。语法如下:

    thread.start_new_thread ( function, args[, kwargs] )
    参数说明:
    • function - 线程函数。
    • args - 传递给线程函数的参数,他必须是个tuple类型。
    • kwargs - 可选参数。

    三:线程模块

      Python通过两个标准库thread和threading提供对线程的支持。thread提供了低级别的、原始的线程以及一个简单的锁。

      thread 模块提供的其他方法:

      •   threading.currentThread(): 返回当前的线程变量。
      •   threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
      •   threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

      除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:

    • run(): 用以表示线程活动的方法。
    • start():启动线程活动。
    • join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
    • isAlive(): 返回线程是否活动的。
    • getName(): 返回线程名。
    • setName(): 设置线程名。

    四:直接使用

    # -*- coding:utf-8 -*-
    __author__ = 'shisanjun'
    
    import threading #导入模块
    import time
    
    def run(t1):
        print("run",t1)
        time.sleep(2)
    
    t1=threading.Thread(target=run,args=("t1",)) #实例线程对象
    t2=threading.Thread(target=run,args=("t2",))
    t1.start() #启动线程
    t2.start()
    
    run("t1")
    run("t2")

    五:通过继承方式实现

    # -*- coding:utf-8 -*-
    __author__ = 'shisanjun'
    
    import threading
    import time
    
    class MyThread(threading.Thread):#继承线程
    
        def __init__(self,n,sleep_time):
            super(MyThread,self).__init__()
            self.n=n
            self.sleep_time=sleep_time
    
        def run(self):
    
            print("start child thread",self.n)
            time.sleep(self.sleep_time)
    
    if __name__=="__main__":
        start_time=time.time()
        t1=MyThread("t1",2)
        t2=MyThread("t2",4)
        t1.start() #子线程并发
        t2.start() #子线程并发
    
        t1.join()#等t1子线程执行完
        t2.join()#等t2子线程执行完
        print("---main finish--",time.time()-start_time)
  • 相关阅读:
    Linux PCI网卡驱动的详细分析
    moand的编程学形式:一个(高阶)类型包办程序的组织--类型关乎复合
    范畴论完全解读:函子是范畴(高阶类型)间的映射
    函数式编程从起点到终点
    锁的本质:操作的序列化
    并发编程概述--C#并发编程经典实例
    异步IO的概念
    基于事件的并发编程
    runloop是iOS系统上的actor模式
    Monad、Actor与并发编程--基于线程与基于事件的并发编程之争
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7063588.html
Copyright © 2011-2022 走看看