L'utilisation de threads et de processus de robot d'exploration Python (avec code)

不言
Libérer: 2018-09-28 14:31:37
avant
1712 Les gens l'ont consulté

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.

Process

utilise

  • pour importer la bibliothèque de classes

import multiprocessing
Copier après la connexion
  • Créer un processus

p1 = multiprocessing.Process(target=test1)
Copier après la connexion

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

Les variables globales ne sont pas partagées entre les processus car les processus sont copiés

Les threads

utilisent

  • Importer une bibliothèque de classes

import threading
Copier après la connexion
  • Créer un fil de discussion

t1 = threading.Thread(target=test1,args=(1000000,))
Copier après la connexion

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

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

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!

Étiquettes associées:
source:cnblogs.com
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