Как сделать одновременный JSONRP c с помощью Gevent и запросов в Volttron - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь выполнять одновременные вызовы JSONRP C для удаленных агентов в Volttron. И я использую Volttron 5.1.0 (с gevent 1.1.2 и запросами 2.11.1).

Код работает как положено. Однако из файлов журнала я заметил, что запросы не выполняются одновременно. Я не уверен, что мне не хватает.

Я попробовал предложения, упомянутые в , как включить запросы в асин c режиме? (то есть, обработка асин c часть в запросе, обезьяна patch, et c.,). Но ничего не получается, либо решение устарело, либо требуются модули, недоступные в volttron env (я немного беспокоюсь о требованиях к версии).

Любые предложения или предложения будут очень полезны.

Соответствующая часть кода агента выглядит следующим образом:

Код агента

import gevent
import requests

url_roots = ['http://192.168.1.51:8080/', 'http://192.168.1.52:8080/']
jobs = [gevent.spawn(do_rpc, self._agent_id, url_root, 'pricepoint'
                                , get_json_params()
                                ) for url_root in url_roots
                                ]
gevent.joinall(jobs, timeout=11)


def do_rpc(id, url_root, method, params=None):
    result = False
    json_package = {
        'jsonrpc': '2.0',
        'id': id,
        'method':method,
    }
    json_package['params'] = params
    response = requests.post(url_root, data=json.dumps(json_package), timeout=10)
    if response.ok:
        if 'result' in response.json().keys():
            success = response.json()['result']
            if success:
                result = True
    return result

Журнал

2020-02-19 21 : 12: 15,913 (xyzagent-0,4 28079) xyz.ispace_msg_utils ОТЛАДКА: validate_bustopic_msg () 2020-02-19 21: 12: 15,918 (xyzagent-0.4 28079) xyz.agent ОТЛАДКА: Новая цена (pp) сообщения на местном автобусе, topi c: здание / цена ... 2020-02-19 21: 12: 15,919 (xyzagent-0,4 28079) xyz.agent ОТЛАДКА: ***** Новая цена предложения от местного: 0,20 Price_id: 2218566 2020-02-19 21: 12: 15,931 (xyzagent-0,4 28079) xyz.agent ОТЛАДКА: post_ds_new_pp () ... 2020-02-19 21: 12: 15,932 (xyzagent-0.4 28079) xyz.agent ОТЛАДКА: количество сообщений pp: 1 ... 2020-02-19 21: 12: 15,933 (xyzagent-0,4 28079) xyz.agent ОТЛАДКА: обработка, стр. Msg 1/1, id цены: 2218566 2020-02-19 21: 12: 15,938 (xyzagent-0,4 28079) xyz.agent ОТЛАДКА: новый ттл: 28. 2020-02-19 21: 12: 15,942 (xyzagent-0,4 28079) xyz.agent ОТЛАДКА: _ds_rpc_1_to_m () ... 2020-02-19 21: 12: 15,953 (xyzagent-0.4 28079) request.packages.urllib3.connectionpool ИНФОРМАЦИЯ: Запуск нового HTTP-соединения (1): 192.168.1.51 2020-02-19 21: 12: 16,079 () volttron.platform.web DEBUG: {'jsonrp c': '2.0', 'id': '2503402', 'result': True} 2020-02-19 21: 12: 16,080 () volttron.platform.web DEBUG: res - это словарь. 2020-02-19 21: 12: 16,238 (xyzagent-0.4 28079) request.packages.urllib3.connectionpool ОТЛАДКА: «POST / bridge HTTP / 1.1» 200 53 2020-02-19 21: 12: 16,245 (xyzagent-0.4 28079) request.packages.urllib3.connectionpool ИНФОРМАЦИЯ: Запуск нового HTTP-соединения (1): 192.168.1.52 2020-02-19 21: 12: 16,526 (xyzagent-0.4 28079) запросы. Packages.urllib3.connectionpool ОТЛАДКА: «POST / bridge HTTP / 1.1» 200 53 2020-02-19 21: 12: 16,529 (xyzagent-0.4 28079) xyz.agent ОТЛАДКА: отправка pp в ds (ZoneController-51), результат: успех !!! 2020-02-19 21: 12: 16,529 (xyzagent-0.4 28079) xyz.agent ОТЛАДКА: отправка pp в ds (ZoneController-52), результат: успех !!! 2020-02-19 21: 12: 16,530 (xyzagent-0,4 28079) xyz.agent ОТЛАДКА: _ds_rpc_1_to_m () ... выполнено 2020-02-19 21: 12: 16,530 (xyzagent-0.4 28079) xyz.agent ОТЛАДКА: msg успешно отправлено всем ds, удалив его из очереди 2020-02-19 21: 12: 16,530 (xyzagent-0.4 28079) xyz.agent ОТЛАДКА: сбросить счетчик повторов для успеха ds msg 2020-02-19 21: 12: 16,530 (xyzagent-0,4 28079) xyz.agent ОТЛАДКА: post_ds_new_pp () ... выполнено

1 Ответ

0 голосов
/ 20 февраля 2020

Следующие изменения сделали свое дело. Обратите внимание, что только monkey.patch_all() ломает вольттрон. Необходимо установить флаг thread=False.

Код агента

import gevent
from gevent import monkey
monkey.patch_all(thread=False, select=False)
import requests

Журналы

2020-02-20 14: 36: 29,981 (xyzagent-0,4 8657 ) xyz.agent ОТЛАДКА: _ds_rpc_1_to_m () ... 2020-02-20 14: 36: 29,987 (xyzagent-0.4 8657) request.packages.urllib3.connectionpool ИНФОРМАЦИЯ: Запуск нового HTTP-соединения (1): 192.168.1.51 2020-02-20 14: 36: 29,992 (xyzagent-0.4 8657) request.packages.urllib3.connectionpool ИНФОРМАЦИЯ: Запуск нового HTTP-соединения (1): 192.168.1.52 2020-02-20 14: 36: 30,260 (xyzagent-0.4 8657) request.packages.urllib3.connectionpool ОТЛАДКА: «POST / bridge HTTP / 1.1» 200 53 2020-02-20 14: 36: 30,333 (xyzagent-0.4 8657) request.packages.urllib3.connectionpool ОТЛАДКА: «POST / bridge HTTP / 1.1» 200 53 2020-02-20 14: 36: 30,341 (xyzagent-0.4 8657) xyz.agent ОТЛАДКА: отправка pp в ds (ZoneController-51), результат: успех !!! 2020-02-20 14: 36: 30,342 (xyzagent-0.4 8657) xyz.agent ОТЛАДКА: отправка pp в ds (ZoneController-52), результат: успех !!! 2020-02-20 14: 36: 30,344 (xyzagent-0.4 8657) xyz.agent ОТЛАДКА: _ds_rpc_1_to_m () ... выполнено

...