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)

 

posted on 2017-06-22 10:28  shisanjun  阅读(163)  评论(0编辑  收藏  举报

导航