Heim  >  Artikel  >  Backend-Entwicklung  >  Definieren und rufen Sie Threads über das Threading-Modul in Python auf

Definieren und rufen Sie Threads über das Threading-Modul in Python auf

高洛峰
高洛峰Original
2017-02-28 17:22:311364Durchsuche

Definieren Sie einen Thread

Der einfachste Weg: Geben Sie mit target die Zielfunktion an, die vom Thread ausgeführt werden soll, und starten Sie sie dann mit start().

Syntax:

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

Gruppe ist immer „Keine“, reserviert für zukünftige Verwendung. Ziel ist der Name der auszuführenden Funktion. Name ist der Thread-Name, der Standardwert ist Thread-N, normalerweise kann der Standardwert verwendet werden. Wenn die serverseitigen Programm-Thread-Funktionen jedoch unterschiedlich sind, wird empfohlen, sie zu benennen.

#!/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()

Ausführungsergebnis:

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

Bestimmen Sie den aktuellen Thread

#!/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()

Ausführungsergebnis:

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

Verwendung mit Protokollierungsmodul:

#!/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()

Ausführungsergebnis:

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


Threads in Unterklassen verwenden

Unsere vorherigen Threads wurden alle in Form einer strukturierten Programmierung erstellt. Threads können auch durch die Integration der Threading.Thread-Klasse erstellt werden. Die Thread-Klasse führt zunächst einige grundlegende Initialisierungen durch und ruft dann ihre run() auf. Die Methode run() ruft die an den Konstruktor übergebene Zielfunktion auf.

#!/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")

Ausführungsergebnis:

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

Weitere Artikel zum Definieren und Aufrufen von Threads über das Threading-Modul in Python finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Variablen und Umfang in PythonNächster Artikel:Variablen und Umfang in Python