Как отправить UDP-запросы через Asyncio в Python 3 - PullRequest
0 голосов
/ 04 июля 2018

Я хотел бы отправлять UDP-сообщения на мой сервер InfluxDB, используя asyncio. Это мой синхронный код:

import socket
import requests
from logger import get_logger

log = get_logger(__name__)


class InfluxDB(object):
    def __init__(self, username, password, host, port, udp=True, udp_port=4444):
        log.info("InfluxDBClient()")
        self.udp = udp
        if self.udp:
            self.udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            self.udp_port_tuple = (host, udp_port)
        self.session = requests.session()
        self.session.auth = (username, password)
        self.base_url = "http://{}:{}".format(host, port)

    def _query(self, payload, endpoint="/query"):
        log.debug(payload)
        return self.session.post(self.base_url + endpoint, params=payload)

    def _write(self, db, data, endpoint="/write"):
        log.debug("{} \t {}".format(db, data))
        return self.session.post(self.base_url + endpoint, params={"db": db}, data=data)

    def write_udp(self, data_str):
        if self.udp:
            return self.udp_socket.sendto(data_str.encode("utf-8"), self.udp_port_tuple)
        else:
            raise Exception("UDP disabled")

Как переписать функцию "write_udp" с использованием синтаксиса async / await?

- редактировать 05.07.2008 -

Чтобы быть более конкретным, я не уверен, как ссылаться на асинхронный эквивалент "сокета". Предположительно, существует версия сокета на основе asyncio, которую я бы назвал self.udp_socket = socket.socket_asyncio, а затем я бы отключил сообщения через await socket.socket_asyncio.sendto (....), что мне нужно понять, это как ссылаться на этот объект сокета на основе asyncio.

...