Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Run same function simultaneously with different arguments

I have been attempting to make a small python program to monitor and return ping results from different servers. I have reached a point where pinging each device in the sequence has become inefficient and lacks performance. I want to continuously ping each one of my targets at the same time on my python.

What would the best approach to this be? Thanks for your time

def get_latency(ip_address, port):
    from tcp_latency import measure_latency
    from datetime import datetime
    now = datetime.now()
    current_time = now.strftime("%Y-%m-%d %H:%M:%S")
    latency = str(measure_latency(host=ip_address, port=port, runs=1, timeout=1))[1:-1]
    #add to table and upload to database function()

ip_address_list = [('google.com', '80'), ('bing.com', '80')]


#Problem
#run function simultaneously but with different arguments
get_latency(ip_address_list[0][0], ip_address_list[0][1])
get_latency(ip_address_list[1][0], ip_address_list[1][1])
like image 992
Unloq Frit Avatar asked Nov 21 '25 21:11

Unloq Frit


1 Answers

For loop does not run in simultaneous.

You can use threading to run in simultaneous.

see this:

import threading

def get_latency(ip_address, port):
    from tcp_latency import measure_latency
    from datetime import datetime
    now = datetime.now()
    current_time = now.strftime("%Y-%m-%d %H:%M:%S")
    latency = str(measure_latency(host=ip_address, port=port, runs=1, timeout=1))[1:-1]
    #add to table and upload to database function()

ip_address_list = [('google.com', '80'), ('bing.com', '80')]

#adding to thread

t1 = threading.Thread(target=get_latency, args=(ip_address_list[0][0], ip_address_list[0][1])) 

t2 = threading.Thread(target=get_latency, args=(ip_address_list[1][0], ip_address_list[1][1])) 

# starting thread 
t1.start() 
t2.start() 

# wait until thread 1 is completely executed 
t1.join() 
# wait until thread 2 is completely executed 
t2.join() 

# both threads completely executed 
print("Done!") 
like image 174
tard Avatar answered Nov 23 '25 22:11

tard