Добавление пользовательского модуля через RPyC

Я пытаюсь добавить новый модуль в соединение.

У меня есть следующие файлы: main.py UpdateDB.py

В UpdateDB:

def UpdateDB():
    ...

В main.py:

import UpdateDB
import rpyc

conn = rpyc.classic.connect(...)
rpyc.utils.classic.upload_package(conn, UpdateDB)
conn.modules.UpdateDB.UpdateDB()

И я могу понять, как вызвать функцию UpdateDB(). Я получил:

AttributeArror: 'module' object has no attribute 'UpdateDB'

Возможно, я пытаюсь сделать это неправильно. Итак, позвольте мне объяснить, что я пытаюсь сделать: я хочу создать соединение с сервером и запустить на нем функцию из файла UpdateDB.py.

1 ответ

Не знаю, как это сделать в классическом режиме (не знаю, зачем вы его используете), но вот как выполнить задачу в более новом режиме службы RPyC.

Скрипт запускается как сервер:

import rpyc
from rpyc.utils.server import ThreadedServer


class MyService(rpyc.Service):
    def exposed_printSomething(self, a):
        print a
        print "printed on server!"
        return 'printed on client!'

if __name__ == '__main__':
    server = ThreadedServer(MyService, port=18812)
    server.start()

Скрипт запускается как Клиент:

import rpyc

if __name__ == '__main__':
    conn = rpyc.connect("127.0.0.1", port=18812)
    print conn.root.printSomething("passed to server!")

Результат на сервере:

passed to server!
printed on server!

Результат на клиенте:

printed on client!
Другие вопросы по тегам