Heim > Backend-Entwicklung > Python-Tutorial > So definieren und rufen Sie Threads in Python über das Threading-Modul auf

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

WBOY
Freigeben: 2016-08-04 08:55:40
Original
1317 Leute haben es durchsucht

Gewinde definieren

Die einfachste Methode: 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={})
Nach dem Login kopieren

Gruppe ist immer „Keine“ und für die zukünftige Verwendung reserviert. 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()

Nach dem Login kopieren

Ausführungsergebnis:

$ ./threading_define.py 
Nach dem Login kopieren

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
Nach dem Login kopieren

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()

Nach dem Login kopieren

Ausführungsergebnis:

$ ./threading_name.py 
Nach dem Login kopieren

first_function is Starting 
second_function is Starting 
third_function is Starting 
third_function is Exiting 
second_function is Exiting 
first_function is Exiting

Nach dem Login kopieren

Zusammen mit dem Protokollierungsmodul verwenden:

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

Nach dem Login kopieren

Ausführungsergebnis:

$ ./threading_names_log.py[DEBUG] (worker  ) Starting
Nach dem Login kopieren

[DEBUG] (Thread-1 ) Starting
[DEBUG] (my_service) Starting
[DEBUG] (worker  ) Exiting
[DEBUG] (Thread-1 ) Exiting
[DEBUG] (my_service) Exiting

Nach dem Login kopieren


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")

Nach dem Login kopieren

Ausführungsergebnis:

$ ./threading_subclass.py 
Nach dem Login kopieren

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

Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage