Artikel untuk membantu anda memahami antara muka proses teragih Python

Lepaskan: 2023-07-25 16:02:19
ke hadapan
1380 orang telah melayarinya

1. Pengenalan

Antara benang dan proses, proses harus disukai kerana proses lebih stabil dan proses boleh diedarkan kepada pelbagai mesin, sementara benang hanya boleh diedarkan kepada pelbagai CPU mesin yang sama .

Modul pemproses berbilang Python bukan sahaja menyokong berbilang proses, tetapi submodul pengurus juga menyokong pengedaran berbilang proses kepada berbilang mesin. Anda boleh menulis proses perkhidmatan sebagai penjadual untuk mengagihkan tugas kepada berbilang proses lain dan bergantung pada komunikasi rangkaian untuk pengurusan.

2. Analisis Kes

Semasa membuat program crawler, ambil semua gambar laman web Jika anda menggunakan pelbagai proses, biasanya satu proses bertanggungjawab untuk merebut alamat pautan gambar dan meletakkan alamat pautan dalam Dalam baris gilir, proses lain bertanggungjawab untuk mengambil alamat pautan daripada baris gilir untuk memuat turun dan menyimpannya secara setempat.

Bagaimana untuk melaksanakannya menggunakan proses teragih?

Proses pada satu mesin bertanggungjawab untuk mendapatkan alamat pautan, dan proses pada mesin lain bertanggungjawab untuk menyimpannya. Masalah utama yang dihadapi adalah untuk mendedahkan baris gilir kepada rangkaian supaya proses mesin lain boleh mengaksesnya Proses yang diedarkan merangkum proses ini.

Contoh:

1.py

from multiprocessing.managers import BaseManager
from multiprocessing import freeze_support, Queue
# 任务个数
task_number = 10


# 收发队列
task_quue = Queue(task_number)
result_queue = Queue(task_number)


def get_task():
    return task_quue


def get_result():
    return result_queue
# 创建类似的queueManager
class QueueManager(BaseManager):
    pass


def win_run():
    # 注册在网络上,callable 关联了Queue 对象
    # 将Queue对象在网络中暴露
    # window下绑定调用接口不能直接使用lambda,所以只能先定义函数再绑定
    QueueManager.register('get_task_queue', callable=get_task)
    QueueManager.register('get_result_queue', callable=get_result)
    # 绑定端口和设置验证口令
    manager = QueueManager(address=('127.0.0.1', 8001), authkey='qiye'.encode())
    # 启动管理,监听信息通道
    manager.start()


    try:
        # 通过网络获取任务队列和结果队列
        task = manager.get_task_queue()
        result = manager.get_result_queue()


        # 添加任务
        for url in ["ImageUrl_" + str(i) for i in range(10)]:
            print('url is %s' % url)
            task.put(url)
            
        print('try get result')
        for i in range(10):
            print('result is %s' % result.get(timeout=10))


    except:
        print('Manager error')
    finally:
        manager.shutdown()


if __name__ == '__main__':
    freeze_support()
    win_run()
Salin selepas log masuk

Sambung ke pelayan, port dan kata laluan pengesahan harus disimpan sama seperti dalam proses pelayan Dapatkan Baris Gilir dari rangkaian, lakukan penyetempatan, dapatkan tugas daripada baris gilir tugasan, dan tuliskan hasilnya kepada keputusan.

Keputusan berjalan adalah seperti berikut:

Dapatkan alamat imej dan hantar alamat ke 2.py.

Terima alamat yang diluluskan oleh 1.py, muat turun imej dan konsol memaparkan hasil merangkak.

Artikel untuk membantu anda memahami antara muka proses teragih Python

3. Ringkasan

Artikel untuk membantu anda memahami antara muka proses teragih Python

Artikel ini berdasarkan asas-asas Python. . Dengan menjelaskan bahawa peranan Queue adalah untuk menyampaikan tugas dan menerima hasil.

Atas ialah kandungan terperinci Artikel untuk membantu anda memahami antara muka proses teragih Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:Go语言进阶学习
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan