Maison > Article > développement back-end > Définir et appeler des threads via le module de threading en Python
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={})
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()
Résultat de l'exécution :
$ ./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é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()
Résultat de l'exécution :
$ ./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
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()
Résultat de l'exécution :
$ ./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
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")
Résultat de l'exécution :
$ ./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
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 !