Я разработал 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