Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in das Python-Lernen mit mehreren Prozessen

Einführung in das Python-Lernen mit mehreren Prozessen

高洛峰
高洛峰Original
2017-03-22 10:19:061002Durchsuche

Grundlegende Verwendung von Multiprozessen

import multiprocessing
import os
import time
 
 
def run():
    print("父进程:%s,子进程:%s" % (os.getppid(), os.getpid()))
    time.sleep(2)
 
if __name__ == "__main__":
        p = multiprocessing.Process(target=run)
        p.start()
        p.join()

Interprozesskommunikation

Der Speicher wird nicht zwischen verschiedenen Prozessen geteilt, um den Datenaustausch zwischen zwei Prozessen zu realisieren Die folgenden Methoden

Warteschlange

import multiprocessing
 
 
def f(q):
    q.put(11111)
 
if __name__ == "__main__":
    q = multiprocessing.Queue()
    p = multiprocessing.Process(target=f, args=(q,))
    p.start()
    print(q.get())

Pipe

import multiprocessing
 
 
def f(conn):
    conn.send(1)
    conn.send(2)
    print(conn.recv())
    conn.close()
 
if __name__ == "__main__":
    parent_conn, child_conn = multiprocessing.Pipe()
    p = multiprocessing.Process(target=f, args=(child_conn,))
    p.start()
    print(parent_conn.recv())
    print(parent_conn.recv())
    parent_conn.send(3)
    p.join()

Datenaustausch zwischen Prozessen

Manager

import multiprocessing
import os
 
 
def func(d, l):
    d[os.getpid()] = os.getpid()
    print(d)
    l.append(os.getpid())
    print(l)
 
if __name__ == "__main__":
    manager = multiprocessing.Manager()
    d = manager.dict()
    l = manager.list()
    p_list = []
    for i in range(5):
        p = multiprocessing.Process(target=func, args=(d, l))
        p.start()
        p_list.append(p)
    for p in p_list:
        p.join()

 

Prozesssperre

Wenn mehrere Prozesse auf gemeinsame Ressourcen zugreifen möchten, kann Lock Zugriffskonflikte vermeiden

import multiprocessing
 
 
def f(l, i):
    l.acquire()
    print("hello world", i)
    l.release()
 
if __name__ == "__main__":
    lock = multiprocessing.Lock()
    for num in range(10):
        p = multiprocessing.Process(target=f, args=(lock, num))
        p.start()

Prozesspool

Prozesspool A Die Prozesswarteschlange wird intern verwaltet. Bei Verwendung wird ein Prozess aus dem Prozesspool abgerufen. Wenn sich kein verwendbarer Prozess im Prozesspool befindet, wartet das Programm, bis ein Prozess im Prozesspool vorhanden ist >

Das obige ist der detaillierte Inhalt vonEinführung in das Python-Lernen mit mehreren Prozessen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn