欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Python中通過(guò)threading模塊定義和調(diào)用線程的方法

 更新時(shí)間:2016年07月12日 18:50:57   作者:磁針石  
由于著名的GIL的存在,Python中雖然能創(chuàng)建多條線程,但卻不能同時(shí)執(zhí)行...anyway,這里我們還是來(lái)學(xué)習(xí)一下在Python中通過(guò)threading模塊定義和調(diào)用線程的方法

定義線程

最簡(jiǎn)單的方法:使用target指定線程要執(zhí)行的目標(biāo)函數(shù),再使用start()啟動(dòng)。

語(yǔ)法:

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})

group恒為None,保留未來(lái)使用。target為要執(zhí)行的函數(shù)名。name為線程名,默認(rèn)為Thread-N,通常使用默認(rèn)即可。但服務(wù)器端程序線程功能不同時(shí),建議命名。

#!/usr/bin/env python3
# coding=utf-8
import threading

def function(i):
  print ("function called by thread {0}".format(i))
threads = []

for i in range(5):
  t = threading.Thread(target=function , args=(i,))
  threads.append(t)
  t.start()
  t.join()

執(zhí)行結(jié)果:

$ ./threading_define.py 
function called by thread 0
function called by thread 1
function called by thread 2
function called by thread 3
function called by thread 4

確定當(dāng)前線程

#!/usr/bin/env python3
# coding=utf-8

import threading
import time

def first_function():
  print (threading.currentThread().getName()+ str(' is Starting \n'))
  time.sleep(3)
  print (threading.currentThread().getName()+ str( ' is Exiting \n'))
  
def second_function():
  print (threading.currentThread().getName()+ str(' is Starting \n'))
  time.sleep(2)
  print (threading.currentThread().getName()+ str( ' is Exiting \n'))
  
def third_function():
  print (threading.currentThread().getName()+\
  str(' is Starting \n'))
  time.sleep(1)
  print (threading.currentThread().getName()+ str( ' is Exiting \n'))
  
if __name__ == "__main__":
  t1 = threading.Thread(name='first_function', target=first_function)
  t2 = threading.Thread(name='second_function', target=second_function)
  t3 = threading.Thread(name='third_function',target=third_function)
  t1.start()
  t2.start()
  t3.start()

執(zhí)行結(jié)果:

$ ./threading_name.py 
first_function is Starting 
second_function is Starting 
third_function is Starting 
third_function is Exiting 
second_function is Exiting 
first_function is Exiting

配合logging模塊一起使用:

#!/usr/bin/env python3
# coding=utf-8

import logging
import threading
import time

logging.basicConfig(
  level=logging.DEBUG,
  format='[%(levelname)s] (%(threadName)-10s) %(message)s',
  )
  
def worker():
  logging.debug('Starting')
  time.sleep(2)
  logging.debug('Exiting')
  
def my_service():
  logging.debug('Starting')
  time.sleep(3)
  logging.debug('Exiting')
  
t = threading.Thread(name='my_service', target=my_service)
w = threading.Thread(name='worker', target=worker)
w2 = threading.Thread(target=worker) # use default name
w.start()
w2.start()
t.start()

執(zhí)行結(jié)果:

$ ./threading_names_log.py[DEBUG] (worker  ) Starting
[DEBUG] (Thread-1 ) Starting
[DEBUG] (my_service) Starting
[DEBUG] (worker  ) Exiting
[DEBUG] (Thread-1 ) Exiting
[DEBUG] (my_service) Exiting


在子類中使用線程

前面我們的線程都是結(jié)構(gòu)化編程的形式來(lái)創(chuàng)建。通過(guò)集成threading.Thread類也可以創(chuàng)建線程。Thread類首先完成一些基本上初始化,然后調(diào)用它的run()。run()方法會(huì)會(huì)調(diào)用傳遞給構(gòu)造函數(shù)的目標(biāo)函數(shù)。

#!/usr/bin/env python3
# coding=utf-8

import logging
import threading
import time

exitFlag = 0

class myThread (threading.Thread):
  def __init__(self, threadID, name, counter):
    threading.Thread.__init__(self)
    self.threadID = threadID
    self.name = name
    self.counter = counter
    
  def run(self):
    print ("Starting " + self.name)
    print_time(self.name, self.counter, 5)
    print ("Exiting " + self.name)
    
def print_time(threadName, delay, counter):
  while counter:
    if exitFlag:
      thread.exit()
    time.sleep(delay)
    print ("%s: %s" %(threadName, time.ctime(time.time())))
    counter -= 1
    
# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# Start new Threads
thread1.start()
thread2.start()
print ("Exiting Main Thread")

執(zhí)行結(jié)果:

$ ./threading_subclass.py 
Starting Thread-1
Starting Thread-2
Exiting Main Thread
Thread-1: Tue Sep 15 11:03:21 2015
Thread-2: Tue Sep 15 11:03:22 2015
Thread-1: Tue Sep 15 11:03:22 2015
Thread-1: Tue Sep 15 11:03:23 2015
Thread-2: Tue Sep 15 11:03:24 2015
Thread-1: Tue Sep 15 11:03:24 2015
Thread-1: Tue Sep 15 11:03:25 2015
Exiting Thread-1
Thread-2: Tue Sep 15 11:03:26 2015
Thread-2: Tue Sep 15 11:03:28 2015
Thread-2: Tue Sep 15 11:03:30 2015
Exiting Thread-2

相關(guān)文章

  • python多線程并發(fā)及測(cè)試框架案例

    python多線程并發(fā)及測(cè)試框架案例

    這篇文章主要介紹了python多線程并發(fā)及測(cè)試框架案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • python 多進(jìn)程和多線程使用詳解

    python 多進(jìn)程和多線程使用詳解

    這篇文章主要介紹了python 多進(jìn)程和多線程使用詳解,幫助大家更好得理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • python對(duì)數(shù)組進(jìn)行排序,并輸出排序后對(duì)應(yīng)的索引值方式

    python對(duì)數(shù)組進(jìn)行排序,并輸出排序后對(duì)應(yīng)的索引值方式

    今天小編就為大家分享一篇python對(duì)數(shù)組進(jìn)行排序,并輸出排序后對(duì)應(yīng)的索引值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python中is與==判斷的區(qū)別

    Python中is與==判斷的區(qū)別

    在python中,is檢查兩個(gè)對(duì)象是否是同一個(gè)對(duì)象,而==檢查他們是否相等.這樣說(shuō)起來(lái)很簡(jiǎn)單,我們通過(guò)具體的實(shí)例來(lái)分析吧
    2017-03-03
  • PyQt6中自定義浮點(diǎn)型滑塊類的實(shí)現(xiàn)

    PyQt6中自定義浮點(diǎn)型滑塊類的實(shí)現(xiàn)

    在PyQt6中,滑塊是常用的用戶界面元素之一,用于選擇數(shù)值范圍,本文主要介紹了PyQt6中自定義浮點(diǎn)型滑塊類的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • PyTorch CUDA環(huán)境配置及安裝的步驟(圖文教程)

    PyTorch CUDA環(huán)境配置及安裝的步驟(圖文教程)

    這篇文章主要介紹了PyTorch CUDA環(huán)境配置及安裝的步驟(圖文教程),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 如何用python合并多個(gè)excel文件

    如何用python合并多個(gè)excel文件

    這篇文章主要介紹了如何用python合并多個(gè)excel文件,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • python的rllib庫(kù)你了解嗎

    python的rllib庫(kù)你了解嗎

    這篇文章主要介紹了python urllib庫(kù)的使用,幫助大家更好的利用python學(xué)習(xí)爬蟲,感興趣的朋友可以了解下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • Python定義一個(gè)函數(shù)的方法

    Python定義一個(gè)函數(shù)的方法

    這篇文章主要介紹了Python定義一個(gè)函數(shù)的方法及相關(guān)實(shí)例,需要的朋友們可以學(xué)習(xí)參考下。
    2020-06-06
  • python基于celery實(shí)現(xiàn)異步任務(wù)周期任務(wù)定時(shí)任務(wù)

    python基于celery實(shí)現(xiàn)異步任務(wù)周期任務(wù)定時(shí)任務(wù)

    這篇文章主要介紹了python基于celery實(shí)現(xiàn)異步任務(wù)周期任務(wù)定時(shí)任務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論