Maison > développement back-end > Tutoriel Python > Définir et appeler des threads via le module de threading en Python

Définir et appeler des threads via le module de threading en Python

高洛峰
Libérer: 2017-02-28 17:22:31
original
1397 Les gens l'ont consulté

Définir un thread

La méthode la plus simple : utilisez target pour spécifier la fonction cible à exécuter par le thread, puis utilisez start() pour le démarrer.

Syntaxe :

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
Copier après la connexion

le groupe est toujours Aucun, réservé pour une utilisation future. target est le nom de la fonction à exécuter. name est le nom du thread, la valeur par défaut est Thread-N, généralement la valeur par défaut peut être utilisée. Cependant, lorsque les fonctions des threads du programme côté serveur sont différentes, il est recommandé de les nommer.

#!/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()
Copier après la connexion

Résultat de l'exécution :

$ ./threading_define.py
Copier après la connexion

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
Copier après la connexion

Déterminer le fil de discussion actuel

#!/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()
Copier après la connexion

Résultat de l'exécution :

$ ./threading_name.py
Copier après la connexion

first_function is Starting 
second_function is Starting 
third_function is Starting 
third_function is Exiting 
second_function is Exiting 
first_function is Exiting
Copier après la connexion

Utilisation avec le module de journalisation :

#!/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()
Copier après la connexion

Résultat de l'exécution :

$ ./threading_names_log.py[DEBUG] (worker  ) Starting
Copier après la connexion

[DEBUG] (Thread-1 ) Starting
[DEBUG] (my_service) Starting
[DEBUG] (worker  ) Exiting
[DEBUG] (Thread-1 ) Exiting
[DEBUG] (my_service) Exiting
Copier après la connexion


Utiliser des threads dans des sous-classes

Nos threads précédents ont tous été créés sous forme de programmation structurée. Des threads peuvent également être créés en intégrant la classe threading.Thread. La classe Thread effectue d'abord une initialisation de base, puis appelle son run(). La méthode run() appellera la fonction cible passée au constructeur.

#!/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")
Copier après la connexion

Résultat de l'exécution :

$ ./threading_subclass.py
Copier après la connexion

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
Copier après la connexion

Pour plus d'articles liés à la définition et à l'appel de threads via le module de threading en Python, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal