# 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. ![Single Threaded Pings](http://git.dlma.com/python_pinger.git/blob/master/images/ping_single_threaded.png) ### 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) ![Long Lived Queue Workers](http://git.dlma.com/python_pinger.git/blob/master/images/ping_long_lived_queue_workers.png) ### 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](http://git.dlma.com/python_pinger.git/blob/master/images/ping_short_lived_workers.png) [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](http://git.dlma.com/python_pinger.git/blob/master/images/ping_long_lived_looping_workers.png) [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).