##// END OF EJS Templates
First beam is loaded by default after sending the beam file to the control modules.
First beam is loaded by default after sending the beam file to the control modules.

File last commit:

r135:136
r231:232
Show More
test5.py
68 lines | 2.0 KiB | text/x-python | PythonLexer
#!/usr/bin/env python
import subprocess
import threading
class Pinger(object):
status = {'alive': [], 'dead': []} # Populated while we are running
hosts = [] # List of all hosts/ips in our input queue
# How many ping process at the time.
thread_count = 4
# Lock object to keep track the threads in loops, where it can potentially be race conditions.
lock = threading.Lock()
def ping(self, ip):
# Use the system ping command with count of 1 and wait time of 1.
ret = subprocess.call(['ping', '-c', '1', '-W', '1', ip],
stdout=open('/dev/null', 'w'), stderr=open('/dev/null', 'w'))
return ret == 0 # Return True if our ping command succeeds
def pop_queue(self):
ip = None
self.lock.acquire() # Grab or wait+grab the lock.
if self.hosts:
ip = self.hosts.pop()
self.lock.release() # Release the lock, so another thread could grab it.
return ip
def dequeue(self):
while True:
ip = self.pop_queue()
if not ip:
return None
result = 'alive' if self.ping(ip) else 'dead'
self.status[result].append(ip)
def start(self):
threads = []
for i in range(self.thread_count):
# Create self.thread_count number of threads that together will
# cooperate removing every ip in the list. Each thread will do the
# job as fast as it can.
t = threading.Thread(target=self.dequeue)
t.start()
threads.append(t)
# Wait until all the threads are done. .join() is blocking.
[ t.join() for t in threads ]
return self.status
if __name__ == '__main__':
ping = Pinger()
ping.thread_count = 8
ping.hosts = [
'10.10.10.97', '10.0.0.2', '10.0.0.3', '10.0.0.4', '10.0.0.0', '10.0.0.255', '10.0.0.100',
'google.com', 'github.com', 'nonexisting', '127.0.1.2', '*not able to ping!*', '8.8.8.8'
]
print ping.start()