English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python中基于线程的并行性

Un thread nel campo dell'informatica è un gruppo di istruzioni che può essere gestito indipendentemente dal scheduler, che fa parte del sistema operativo.

La funzione principale dei thread è eseguire più thread contemporaneamente. Thread significa diversi compiti, chiamate di funzione nel programma e thread che eseguono contemporaneamente, il che non significa che eseguono su computer diversi.

Si utilizzano thread multipli in entrambi i casi.

  • Quando l'output del sottoprogramma deve essere combinato con il programma principale.

  • Quando il programma principale contiene codice indipendente l'uno dall'altro.

Modulo thread

Python fornisce un modulo thread molto potente e anche supporto avanzato per i thread.

Il modulo thread definisce molte funzioni che vengono utilizzate per ottenere dati relativi ai thread e queste funzioni si eseguono automaticamente.

threading.active_count()

Questa funzione restituisce il numero di oggetti Thread attivi. In questo caso, il conteggio restituito è uguale alla lunghezza della lista restituita.enumerate().

threading.current_thread()

Questa funzione restituisce l'oggetto Thread corrente, che corrisponde al thread di controllo chiamante.

threading.get_ident()

Questa funzione restituisce l'identificatore del thread corrente. È un intero non zero.

threading.enumerate()

Questa funzione restituisce l'elenco di tutti gli oggetti Thread attivi (inclusi i thread守护) del thread corrente, la funzione current_thread() crea thread virtuali e thread principali, e esclude i thread terminati e non avviati.

threading.main_thread()

Questa funzione restituisce l'oggetto thread principale.

threading.settrace(func)

Dopo aver avviato tutte le thread dal modulo thread, impostare la funzione di tracciamento.run()Prima di chiamare il metodo, questa funzione passerà a ciascun thread il trace() di sys.

threading.setprofile(func)

Dopo aver avviato tutte le thread dal modulo thread, impostare la funzione di configurazione del file. Inrun()Prima di chiamare il metodo, questa funzione passerà a sys.setprofile() per ogni thread.

threading.stack_size([size])

La funzione restituisce la dimensione della pila del thread e viene utilizzata quando si crea un nuovo thread.

THREAD_TIMEOUT_MAX

Questa è una costante che ha il valore massimo del timeout per le funzioni bloccanti (Lock.acquire(), RLock.acquire(), Condition.wait() ecc.).

Esempio di codice

import threading
def trace_function():
   print("Passing the trace function")
   def profile():
      print("PROFILE THREAD: " + str(threading.current_thread().getName()))
      class mythread(threading.Thread):
      def __init__(self, thread_name, thread_ID):
         threading.Thread.__init__(self)
         self.thread_name = thread_name
         self.thread_ID = thread_ID
      def run(self):
         print(str(self.thread_ID));
         print("ACTIVE THREADS ARE: " + str(threading.active_count()))
         print("CURRENT THREAD IS: " + str(threading.current_thread().getName()))
         my_thread1 = mythread("PP", 500)
         my_thread2 = mythread("PythonProgram", 1000);
         print("NAME OF THE MAIN THREAD: " + str(threading.main_thread().getName()))
         print("IDENTIFICATION OF MAIN THREAD: " + str(threading.get_ident()))
         print("DIMENSIONE STACK = " + str(threading.stack_size()))
      print(threading.settrace(trace_function()))
   threading.setprofile(profile())
my_thread1.start()
my_thread2.start()
print("ELenco di enumerazione: ")
print(threading.enumerate())
print("EXIT")

Risultato di output

NOME THREAD PRINCIPALE: MainThread
IDENTIFICAZIONE THREAD PRINCIPALE: 5436
DIMENSIONE STACK = 0
Passaggio della funzione trace
None
PROFILO THREAD: MainThread
500
1000ELenco di enumerazione: THREAD ATTIVI: 6
[<_MainThread(MainThread, avviato 5436)>, <Thread(Thread-4, avviato daemon 1960)>, <Heartbeat(Thread-5, avviato daemon 6452)>, <HistorySavingThread(IPythonHistorySavingThread, avviato 4304)>, <mythread(Thread-8, avviato 8460)>, <mythread(Thread-9, avviato 4668)>]
EXIT
THREAD ATTUALE: Thread-8
THREAD ATTIVI: 5
THREAD ATTUALE: Thread-9