import timeit import numpy import datetime import threading import tangostationcontrol from tango import DeviceProxy from tangostationcontrol.beam.delays import Delays Antenna_Field_Reference_ITRF_R = numpy.array([3826896.192, 460979.502, 5064658.231]) Antenna_Reference_ITRF_R = numpy.array([[3826885.71898169, 460981.16159554, 5064665.97751092]] * 24) Pointing_direction_R = numpy.array([["J2000", "0deg", "0deg"]] * 488) d = Delays(Antenna_Field_Reference_ITRF_R) d.set_measure_time(datetime.datetime.now()) relative_antenna_positions = Antenna_Reference_ITRF_R - Antenna_Field_Reference_ITRF_R l = threading.Lock() def compute_delays(): #l.acquire() d.set_measure_time(datetime.datetime.now()) _ = d.delays_bulk(Pointing_direction_R, relative_antenna_positions) #l.release() def fun(n,nthreads): elapsed=timeit.timeit(compute_delays, number=n) print(f"{n} calls in {nthreads} threads cost {elapsed:.2f}s: each call needed {elapsed/n:.2f}s wall clock time") for nthreads in (1,2,3,4): threads = [threading.Thread(target=fun,args=(10,nthreads)) for x in range(nthreads)] [t.start() for t in threads] [t.join() for t in threads]