Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan modul berbilang pemprosesan untuk komunikasi antara proses dalam Python 3.x

Cara menggunakan modul berbilang pemprosesan untuk komunikasi antara proses dalam Python 3.x

WBOY
WBOYasal
2023-08-01 12:39:241289semak imbas

Cara menggunakan modul multiprocessing untuk komunikasi antara proses dalam Python 3.x

Dengan perkembangan teknologi komputer, kita selalunya perlu melaksanakan pelbagai tugas pada masa yang sama dalam pengaturcaraan. Untuk memanfaatkan lebih baik pemproses berbilang teras, modul pemproses berbilang Python menyediakan set alat yang ringkas namun berkuasa untuk mencipta atur cara serentak. Modul multiprocessing membolehkan kami menggunakan pelbagai proses dalam Python, yang boleh dilaksanakan serentak dan berkomunikasi apabila diperlukan. Artikel ini akan memperkenalkan cara menggunakan modul berbilang pemprosesan untuk komunikasi antara proses dan menyediakan contoh kod yang sepadan.

  1. Menggunakan Queue untuk komunikasi antara proses
    Modul multiprocessing menyediakan kelas Queue untuk menghantar data antara proses. Berikut ialah contoh penggunaan Queue untuk komunikasi antara proses:
from multiprocessing import Process, Queue

def worker(q):
    # 从队列中获取数据并处理
    while True:
        data = q.get()
        if data is None:
            break
        # 处理数据
        print("Worker got:", data)

if __name__ == '__main__':
    # 创建一个队列
    q = Queue()

    # 创建多个进程
    processes = []
    for i in range(3):
        p = Process(target=worker, args=(q,))
        processes.append(p)
        p.start()

    # 往队列中放入数据
    for i in range(10):
        q.put(i)

    # 添加结束标记到队列中
    for i in range(3):
        q.put(None)

    # 等待进程结束
    for p in processes:
        p.join()

Dalam kod di atas, kami telah mencipta fungsi pekerja yang mendapatkan data daripada baris gilir melalui Queue dan memprosesnya. Kemudian kami mencipta tiga proses, setiap proses akan melaksanakan fungsi pekerja. Dalam proses utama, kami meletakkan beberapa data ke dalam baris gilir dan menambah penanda tamat. Akhirnya, kami menunggu semua proses tamat.

  1. Gunakan Pipe untuk komunikasi antara proses
    Selain menggunakan Queue, modul multiprocessing juga menyediakan kelas Pipe untuk mencipta paip dwiarah antara proses. Berikut ialah contoh penggunaan Pipe untuk komunikasi antara proses:
from multiprocessing import Process, Pipe

def worker(conn):
    # 接收数据并打印
    data = conn.recv()
    print("Worker got:", data)

    # 发送数据回主进程
    conn.send("Hello from worker")

    # 关闭连接
    conn.close()

if __name__ == '__main__':
    # 创建一个管道
    parent_conn, child_conn = Pipe()

    # 创建子进程
    p = Process(target=worker, args=(child_conn,))
    p.start()

    # 发送数据到子进程
    parent_conn.send("Hello from main process")

    # 接收子进程的返回数据
    data = parent_conn.recv()
    print("Main process got:", data)

    # 等待子进程结束
    p.join()

Dalam kod di atas, kami mencipta fungsi pekerja yang menerima data yang dihantar oleh proses utama melalui Pipe dan mencetaknya. Kemudian ia menghantar mesej kembali ke proses utama. Dalam proses utama, kami membuat paip dan lulus salah satu port ke proses anak. Kemudian kami menghantar mesej kepada proses kanak-kanak dan menerima data pemulangan daripada proses kanak-kanak. Akhirnya, kita tunggu proses anak selesai.

Ringkasan:
Menggunakan modul berbilang pemprosesan untuk komunikasi antara proses adalah sangat mudah Ia menyediakan dua kelas, Queue dan Pipe, untuk melaksanakan penghantaran data antara proses. Kelas Queue digunakan untuk komunikasi sehala, menghantar data antara proses melalui kaedah put dan get. Kelas Paip digunakan untuk komunikasi dua hala antara proses melalui kaedah hantar dan recv. Sama ada menggunakan Queue atau Pipe, kami boleh memindahkan data dengan mudah antara proses yang berbeza untuk mencapai pelaksanaan tugas serentak dan komunikasi antara proses.

Atas ialah kandungan terperinci Cara menggunakan modul berbilang pemprosesan untuk komunikasi antara proses dalam Python 3.x. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn