国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

Original 2017-01-16 17:45:36 682
abstract:定義線程最簡單的方法:使用target指定線程要執(zhí)行的目標函數(shù),再使用start()啟動。語法:class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})group恒為None,保留未來使用。target為要執(zhí)行的函數(shù)名。name為線程名,默認為Thr

定義線程

最簡單的方法:使用target指定線程要執(zhí)行的目標函數(shù),再使用start()啟動。

語法:

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


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

#!/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í)行結果:

$ ./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


確定當前線程

#!/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í)行結果:

$ ./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í)行結果:

$ ./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

在子類中使用線程

前面我們的線程都是結構化編程的形式來創(chuàng)建。通過集成threading.Thread類也可以創(chuàng)建線程。Thread類首先完成一些基本上初始化,然后調(diào)用它的run()。run()方法會會調(diào)用傳遞給構造函數(shù)的目標函數(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í)行結果:

$ ./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

 更多關于在Python中通過threading模塊定義和調(diào)用線程的方法請關注PHP中文網(wǎng)(www.miracleart.cn)其他文章!   



Release Notes

Popular Entries