Heim > Artikel > Backend-Entwicklung > Die Verwendung von Python-Crawler-Threads und -Prozessen (mit Code)
Der Inhalt dieses Artikels befasst sich mit der Verwendung von Python-Crawler-Threads und -Prozessen (mit Code). Ich hoffe, dass er für Sie hilfreich ist.
Klassenbibliothek importieren
import multiprocessing
p1 = multiprocessing.Process(target=test1)
Prozessparameter: group=None, target=None, name=None, args=(), kwargs={})
Globale Variablen
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()
Globale Variablen werden nicht zwischen Prozessen geteilt, da Prozesse kopiert werden
Klassenbibliothek importieren
import threading
Thread erstellen
t1 = threading.Thread(target=test1,args=(1000000,))
Thread-Parameter: Gruppe=Keine, Ziel=Keine , name=None,args=(), kwargs=None, *, daemon=None
globale Variable
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()
kritischer Abschnitt, nur Ein Programm betritt gleichzeitig den Codeblock zur Ausführung und umschließt im Allgemeinen die geänderte Stelle
Wenn andere Threads „Akquise“ aufrufen, tritt der aktuelle Thread in die Warteschleife ein
threading.RLock() rekursives Sperrthreading. Bedingungssemaphor oder bedingte Sperre
Producer-Consumer-Muster
Das Producer-Consumer-Muster ist eine Anwendung der Inter-Thread-Kommunikation
Bestimmen Sie, ob die Datenstruktur selbst threadsicher ist. List([]) und Dictionary dic({}) sind nicht threadsicher.
rrreeDas obige ist der detaillierte Inhalt vonDie Verwendung von Python-Crawler-Threads und -Prozessen (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!