On Wednesday, February 19, 2014 at 4:55:03 PM UTC+1, Guido van Rossum wrote:
>
> Because that would require duplicating the logic in 
> create_datagram_endpoint(), which is totally separate (all the way down to 
> the I/O callbacks).
>
> Feel free to add a feature request to the tracker for this though. Be sure 
> to indicate an actual use case (rather than just abstract interest). E.g. 
> do you expect to need this in OpenStack? How?
>

Hi everybody,

I would wake-up this thread because I have a concrete use case to have that 
in AsyncIO, even if it would the only one concrete use case from a 
production environment:
systemd has a watchdog mechanism and a way to communicate between a daemon 
and systemd.
It uses a UNIX socket with DGRAM, the mechanism is named sd_notify.

For example, a Python that implements 
sd_notify: 
https://github.com/bb4242/sdnotify/blob/master/sdnotify/__init__.py#L35
Another example in 
Python: 
https://gist.github.com/Spindel/1d07533ef94a4589d348#file-watchdogged-py-L78

More technical documentation about sd_notify 
protocol: https://www.freedesktop.org/software/systemd/man/sd_notify.html

In fact, if somebody has a workaround or a way to implement that gently 
with AsyncIO, it would be awesome, because I need to ping-pong with systemd 
to say that my daemon is still alive.
Thanks for your help.

I have tried to find a way with loop.create_datagram_endpoint() that would 
be the most closer what I want and a custom socket, I have this error:

   File 
"/usr/local/pythonz/pythons/CPython-3.6.2/lib/python3.6/asyncio/base_events.py",
 
line 951, in create_datagram_endpoint 
     yield from waiter 
 AssertionError: yield from wasn't used with future

My piece of code:

sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
sock.setblocking(False)

sock.connect(os.environ["NOTIFY_SOCKET"])

transport, protocol = loop.create_datagram_endpoint(
lambda: WatchDogClientProtocol(loop),
sock=sock)

Reply via email to