Security News
PyPI’s New Archival Feature Closes a Major Security Gap
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
Ergonomic bindings for nanomsg next generation (nng), in Python. pynng provides a nice interface on top of the full power of nng. nng, and therefore pynng, make it easy to communicate between processes on a single computer or computers across a network. This library is compatible with Python ≥ 3.6. nng is the rewriting of Nanomsg, which is the spiritual successor to ZeroMQ.
Provide a Pythonic, works-out-of-the box library on Windows and Unix-y platforms. Like nng itself, the license is MIT, so it can be used without restriction.
On Windows, MacOS, and Linux, the usual
pip3 install pynng
should suffice. Note that on 32-bit Linux and on macOS no binary distributions are available, so CMake is also required.
Building from the GitHub repo works as well, natch:
git clone https://github.com/codypiersall/pynng
cd pynng
pip3 install -e .
(If you want to run tests, you also need to pip3 install trio curio pytest pytest-asyncio pytest-trio pytest-curio
,
then just run pytest test
.)
pynng might work on the BSDs as well. Who knows!
Using pynng is easy peasy:
from pynng import Pair0
s1 = Pair0()
s1.listen('tcp://127.0.0.1:54321')
s2 = Pair0()
s2.dial('tcp://127.0.0.1:54321')
s1.send(b'Well hello there')
print(s2.recv())
s1.close()
s2.close()
Since pynng sockets support setting most parameters in the socket's __init__
method and is a context manager, the above code can be written much shorter:
from pynng import Pair0
with Pair0(listen='tcp://127.0.0.1:54321') as s1, \
Pair0(dial='tcp://127.0.0.1:54321') as s2:
s1.send(b'Well hello there')
print(s2.recv())
Asynchronous sending also works with
curio, trio and asyncio. Here is an example using trio:
import pynng
import trio
async def send_and_recv(sender, receiver, message):
await sender.asend(message)
return await receiver.arecv()
with pynng.Pair0(listen='tcp://127.0.0.1:54321') as s1, \
pynng.Pair0(dial='tcp://127.0.0.1:54321') as s2:
received = trio.run(send_and_recv, s1, s2, b'hello there old pal!')
assert received == b'hello there old pal!'
Many other protocols are available as well:
Pair0
: one-to-one, bidirectional communication.Pair1
: one-to-one, bidirectional communication, but also supporting
polyamorous socketsPub0
, Sub0
: publish/subscribe sockets.Surveyor0
, Respondent0
: Broadcast a survey to respondents, e.g. to find
out what services are available.Req0
, Rep0
: request/response pattern.Push0
, Pull0
: Aggregate messages from multiple sources and load balance
among many destinations.Some examples (okay, just two examples) are available in the examples directory.
The only stable branch is master
. There will never be a git push -f
on master. On the other hand, all other branches are not considered stable;
they may be deleted, rebased, force-pushed, and any other manner of funky
business.
FAQs
Networking made simply using nng
We found that pynng demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
Research
Security News
Malicious npm package postcss-optimizer delivers BeaverTail malware, targeting developer systems; similarities to past campaigns suggest a North Korean connection.
Security News
CISA's KEV data is now on GitHub, offering easier access, API integration, commit history tracking, and automated updates for security teams and researchers.