Python中threading,python3 threading模块_1

  Python中threading,python3 threading模块

  线程提供了比线程模块更高级别的API来提供线程的并发性。这些线程并发运行并共享内存。

  下面来看threading模块的具体用法:

  一、使用Thread,目标函数可以实例化一个Thread对象,每个Thread对象代表一个线程,可以通过start()方法启动。

  这里对使用多线程并发和不应用多线程并发进行了比较:

  第一个是没有多线程的操作:

  代码如下:

  #!/usr/bin/python

  # compareformultithreads

  进口时间

  defworker():

  打印“工人”

  时间.睡眠(1)

  返回

  if__name__==__main__:

  传真号码(5):

  worker()的执行结果如下:

  下面是使用多线程并发的操作:

  代码如下:

  #!/usr/bin/python

  导入线程

  进口时间

  defworker():

  打印“工人”

  时间.睡眠(1)

  返回

  传真号码(5):

  t=螺纹。线程(目标=工作线程)

  T.start()可以清楚地看到,使用多线程并发的操作花费的时间要少得多。

  二。threading.activeCount()的使用。此方法返回当前进程中的线程数。返回的数字包含主线程。

  代码如下:

  #!/usr/bin/python

  #当前线程数

  导入线程

  进口时间

  defworker():

  打印“测试”

  时间.睡眠(1)

  传真号码(5):

  t=螺纹。线程(目标=工作线程)

  启动()

  print current has % d threads“%(threading . active count()-1)III。threading.enumerate()的使用。该方法返回当前运行的线程对象列表。

  相关建议: 《Python视频教程》

  代码如下:

  #!/usr/bin/python

  # testthevariablethreading . enumerate()

  导入线程

  进口时间

  defworker():

  打印“测试”

  时间.睡眠(2)

  线程=[]

  fori

  nbsp;inxrange(5):

  t=threading.Thread(target=worker)

  threads.append(t)

  t.start()

  

  foriteminthreading.enumerate():

  printitem

  

  print

  

  foriteminthreads:

  printitem四、threading.setDaemon()的使用。设置后台进程。

  代码如下:

  

#!/usr/bin/python

  #createadaemon

  importthreading

  importtime

  

  defworker():

  time.sleep(3)

  print"worker"

  

  t=threading.Thread(target=worker)

  t.setDaemon(True)

  t.start()

  print"haha"

可以看出worker()方法中的打印操作并没有显示出来,说明已经成为后台进程。

  threading.Thread

  Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入。下面分别举例说明。先来看看通过继承threading.Thread类来创建线程的例子:

  

#coding=gbk

  importthreading,time,random

  count=0

  classCounter(threading.Thread):

  def__init__(self,lock,threadName):

  

  '''@summary:初始化对象。

  

  

  @paramlock:琐对象。

  

  @paramthreadName:线程名称。

  

  '''

  super(Counter,self).__init__(name=threadName)

  #注意:一定要显式的调用父类的初始

  化函数。

  self.lock=lock

  

  defrun(self):

  

  '''@summary:重写父类run方法,在线程启动后执行该方法内的代码。

  

  '''

  globalcount

  self.lock.acquire()

  foriinxrange(10000):

  count=count+1

  self.lock.release()

  lock=threading.Lock()

  foriinrange(5):

  Counter(lock,"thread-"+str(i)).start()

  time.sleep(2)

  #确保线程都执行完毕

  printcount

在代码中,我们创建了一个Counter类,它继承了threading.Thread。初始化函数接收两个参数,一个是锁对象,另一个是线程的名称。在Counter中,重写了从父类继承的run方法,run方法将一个全局变量逐一的增加10000。在接下来的代码中,创建了五个Counter对象,分别调用其start方法。最后打印结果。这里要说明一下run方法 和start方法: 它们都是从Thread继承而来的,run()方法将在线程开启后执行,可以把相关的逻辑写到run方法中(通常把run方法称为活动[Activity]。);start()方法用于启动线程。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: