David Blume's GitList
Repositories
python_pinger.git
Code
Commits
Branches
Tags
Search
Tree:
e73f511
Branches
Tags
main
python_pinger.git
README.md
first commit.
David Blume
commited
e73f511
at 2019-07-05 20:08:07
README.md
Blame
History
Raw
# python_pinger These are different approaches to how one might implement a daemon to repeatedly ping multiple hosts to see if the network is up. ## Single Threaded This is the most naive implementation. For each ping host, the main process thread pings them one at a time, and prints any changes.  ### Upsides Really simple code. ### Downsides Since the pings are serialized, one long timeout from one host could affect detecting a problem at another host. ## Long Lived Workers Consuming from Queue Raymond Hettinger's [PyBay 2018 Keynote](https://pybay.com/site_media/slides/raymond2017-keynote/threading.html) uses the queue module to send data between threads, so I thought I'd make a version of the pinger that did the same. [long\_lived\_worker\_queue.py](http://git.dlma.com/python_pinger.git/blob/master/long_lived_worker_queue.py)  ### Upsides Multi-threaded ping calls won't block each other. ### Downsides The ping tasks read from, and write to a shared dictionary. (Reading and updating the last status.) ## Short Lived Workers  [short\_lived\_workers.py](http://git.dlma.com/python_pinger.git/blob/master/short_lived_workers.py) ### Upsides The worker tasks aren't in memory if they're not doing anything. So usually a smaller memory profile. ### Downsides The ping tasks still read from, and write to a shared dictionary. (Reading and updating the last status.) ## Long Lived Looping Workers  [long\_lived\_looping\_workers.py](http://git.dlma.com/python_pinger.git/blob/master/long_lived_looping_workers.py) ### Upsides No more race conditions! The worker threads mind their own business. ### Downsides The worker threads remain in memory. ## Is it any good? [Yes](https://news.ycombinator.com/item?id=3067434). ## Licence This software uses the [MIT license](http://git.dlma.com/python_pinger.git/blob/master/LICENSE.txt).