Maison >développement back-end >Tutoriel Python >L'utilisation de threads et de processus de robot d'exploration Python (avec code)
Le contenu de cet article concerne l'utilisation des threads et des processus du robot d'exploration Python (avec du code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
pour importer la bibliothèque de classes
import multiprocessing
Créer un processus
p1 = multiprocessing.Process(target=test1)
Paramètres du processus : group=Aucun, target=Aucun, name=Aucun, args=(), kwargs={})
Variables globales
import time, os import multiprocessing nums = [11, 22, 33] def test(): nums.append(44) print('在进程1中nums=%s' % str(nums),id(nums)) time.sleep(3) def test2(): print('在进程2中nums=%s' % str(nums),id(nums)) def main(): print('----in 主进程 pid=%d----父进程pid=%d----' % (os.getpid(), os.getppid())) p = multiprocessing.Process(target=test) p.start() p2 = multiprocessing.Process(target=test2) p2.start() # test() # test2() if __name__ == '__main__': main()
Les variables globales ne sont pas partagées entre les processus car les processus sont copiés
Importer une bibliothèque de classes
import threading
Créer un fil de discussion
t1 = threading.Thread(target=test1,args=(1000000,))
Paramètres du fil : group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None
Variable globale
import time,threading g_num = 0 mutex = threading.Lock() def test1(num): global g_num # mutex.acquire() for i in range(num): mutex.acquire() g_num += 1 mutex.release() # mutex.release() print('-------in test1 g_num=%d-----' % g_num) def test2(num): global g_num # mutex.acquire() for i in range(num): mutex.acquire() g_num += 1 mutex.release() # mutex.release() print('-------in test2 g_num=%d-----' % g_num) def main(): t1 = threading.Thread(target=test1,args=(1000000,)) t2 = threading.Thread(target=test2,args=(1000000,)) t1.start() t2.start() time.sleep(3) print('-------------in main Thread g_num = %d----' % g_num) if __name__ == '__main__': main()
Section critique, un seul programme entre dans le bloc de code pour exécution en même temps, en entourant généralement l'endroit modifié
Si d'autres threads appellent acquérir, le thread actuel entre en attente
threading.RLock() threading de verrouillage récursif.Sémaphore de condition ou verrouillage conditionnel
mode consommateur producteur
producteur consommateur Pattern est une application de la communication inter-thread
Déterminez si elle est thread-safe lorsque la structure de données elle-même est thread-safe. List([]) et le dictionnaire dic({}) ne sont pas thread-safe.
def set_value(q): index = 0 while True: q.put(index) index += 1 q.put(index) index += 1 time.sleep(2) def get_value(q): while True: print('消费者获取数据:',q.get()) #若队列为空就sleep休眠,直到队列有数据def main(): q = Queue(4) t1 = threading.Thread(target=set_value,args=[q]) t2 = threading.Thread(target=get_value,args=[q]) t1.start() t2.start()
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!