14.2. Multiprocessing Server

14.2.1. SetUp

iris.py:

from dataclasses import dataclass

@dataclass
class Iris:
    sepal_length: float
    sepal_width: float
    petal_length: float
    petal_width: float
    species: str

    def sepal_area(self):
        return self.sepal_length * self.sepal_width

    def petal_area(self):
        return self.petal_length * self.petal_width

    def total_area(self):
        return self.sepal_area() + self.petal_area()

14.2.2. Server

  • Obiekt nasłuchujący na połączenia multiprocessing-listener.py:

import pickle
from multiprocessing.connection import Listener
from iris import Iris


ADDRESS = ('localhost', 6000)
PASSWORD = b'My voice is my password, verify me.'

listener = Listener(ADDRESS, authkey=PASSWORD)
connection = listener.accept()

while True:
    payload = connection.recv()

    if payload == 'close':
        connection.close()
        break

    flower = pickle.loads(payload)
    area = flower.total_area()
    print(f'Area: {area}')

listener.close()

14.2.3. Assignments

Code 14.25. Solution
import json
from multiprocessing.connection import Listener


ADDRESS = ('localhost', 6000)
PASSWORD = b'My voice is my password, verify me.'


def run():
    listener = Listener(ADDRESS, authkey=PASSWORD)
    connection = listener.accept()

    while True:
        payload = connection.recv()

        if payload == 'close':
            connection.close()
            break

        data = json.loads(payload)
        print(data)

    listener.close()