Я хотел бы отправлять 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.2018 -
Чтобы быть более конкретным, я не уверен, как ссылаться на asyncio-эквивалент «сокета». Предположительно существует версия сокета на основе asyncio, которую я бы назвал self.udp_socket = socket.socket_asyncio, а затем я бы отправил сообщения через await socket.socket_asyncio.sendto (....), что мне нужно понять, это как ссылаться на этот объект сокета на основе asyncio.
@SufiyanGhori, это синхронно
@dirn Я не уверен, как ссылаться на asyncio-эквивалент "socket".
потоки то, что вы ищете?
@dirn Я думал, что потоки предназначены только для TCP, а не для UDP?
Не имею представления. Может, транспорты и протоколы подойдет лучше.
Что ты пробовал? Какие у вас проблемы?