Многопроцессорность между локальной машиной и AWS? - PullRequest
0 голосов
/ 04 февраля 2019

Я разработал 3 скрипта (сервер, писатель и читатель), которые работают вместе, используя BaseManager из multiprocessing.managers.Все они отлично работают вместе в AWS или локально.Но сейчас я хочу все перемешать.Для более сложных сценариев, используя графический процессор, я хочу использовать свой локальный компьютер и по-прежнему запускать его с AWS ...

Как мне подключиться к «Серверу», который создает IPC, очереди и т. Д., который работает на AWS?

(Изменить: я нашел ответчик, см. Ниже, я удалил технические детали, которые я ранее оставил здесь, и создал более общий вопрос и ответ для тех из вас, у кого такая же проблема)

Пожалуйста, посмотрите код для 3 сущностей ниже:

Сервер:

from multiprocessing.managers import BaseManager
from queue import Queue

class Server():
    def __init__(self, ip, port, authkey):
        super(Server, self).__init__()
        self.ip = ip
        self.port = port
        self.authkey = authkey

    def make_server_manager(self):
        """ Create a manager for the server, listening on the given port.
            Return a manager object with all the required queues.
        """
        q = Queue()  # input queue
        BaseManager.register('q', callable=lambda: q)
        manager = BaseManager(address=(self.ip, self.port), authkey=self.authkey)
        print('Server started at port ' + str(self.port))
        return manager


if __name__ == "__main__":
    ip = '172.31.2.45'
    port = 11111
    authkey = 'abc'.encode('utf-8')

    s = Server(ip, port, authkey)
    mgr = s.make_server_manager()
    s = mgr.get_server()
    s.serve_forever()

Writer (работает на AWS, хотя он также может работать локально на моем компьютере, если мне нужноэто к):

from multiprocessing.managers import BaseManager

class Client():

    def __init__(self, ip, port, authkey):
        super(Client, self).__init__()
        self.ip = ip
        self.port = port
        self.authkey = authkey

        # Create the queus and variables
        BaseManager.register('q')
        m = BaseManager(address=(ip, port), authkey=authkey)
        m.connect()
        self.q = m.q()

if __name__ == "__main__":
    ip = '172.31.2.45'
    port = 11111
    authkey = 'abc'.encode('utf-8')

    Client = Client(ip, port, authkey)

    while True:
        X = input('What is your secret message?')
        Client.q.put(X)
        if X == 'Close':
            break

Читатель (работает на моем локальном компьютере для целей этого упражнения)

from multiprocessing.managers import BaseManager

class Client():

    def __init__(self, ip, port, authkey):
        super(Client, self).__init__()
        self.ip = ip
        self.port = port
        self.authkey = authkey

        # Create the queus and variables
        BaseManager.register('q')
        m = BaseManager(address=(ip, port), authkey=authkey)
        print('connecting...')
        m.connect()
        print('connected')
        self.q = m.q()

if __name__ == "__main__":
    ip = '18.191.25.217'
    port = 11111
    authkey = 'abc'.encode('utf-8')

    Client = Client(ip, port, authkey)

    while True:
        rcvd = Client.q.get()
        print(rcvd)
        if rcvd == 'Close':
            break

1 Ответ

0 голосов
/ 20 июня 2019

(Я нашел ответ сам, поэтому решил немного изменить свой вопрос и удостовериться, что выделил важные биты в ответе.)

Чтобы это работало, важно настроитьIP-адреса правильно указаны в вашей группе безопасности на AWS и в ваших сценариях.

В ответе, который я здесь даю, предполагается, что сервер работает на AWS , а другие сценарии могут запускаться либо локально, либо в AWS.

Требуется следующая настройка:
В вашей группе безопасности AWS создайте пользовательское правило TCP со следующими характеристиками:
1. IP-адрес: IP-адрес вашего локального компьютера
2Диапазон портов: Порт (диапазон / номер), на котором работает ваш Сервер, в данном случае 11111

Ваши сценарии должны содержать следующие IP-адреса:
- Сервер (работает на AWS): частный IP-адресэкземпляра в AWS
- процессы, не запущенные в AWS (Reader / Writer / все, что вы выбираете для запуска на локальном компьютере): общедоступный IPv4-адрес экземпляра, на котором работает серверr работает

Номер порта и код аутентификации в ваших скриптах, очевидно, должны совпадать.

Надеюсь, это понятно.Наслаждайтесь всеми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...