Timed Pool#

misc.timed_pool.run(max_child_proc_cnt=4, func=None, args=None, max_time=None, delete_data=True)#

Creates a subprocess loop to work the issue task defined by func and it’s arguments. This subprocess loop is different in two key elements from the default python processpool.

  1. Only a single subprocess can return data at a time. This drastically decreases the odds of a memory utilization spikes which otherwise would cause a crash. This is linked to how pickle handles data transfer via pipes.

  2. A maximum time can be set after which a subprocess is terminated and restarted.

Parameters:
  • max_child_proc_cnt – Maximum number of child processes.

  • func – The function to be processed.

  • args – List of arguments. Every element in the list is handled by a separate process.

  • max_time – Maximum time to wait for a processe prior to cancellation.

  • delete_data – Flag on whether input data is deleted after successful computation of it’s results.

:return The processed information from func and args as a list. The order is identical to the order in which the argument blocks were given.

The following code example shows how to use the multiprocessing pool.

import finn.misc.timed_pool as tp

NUMBER_OF_PROCESSES = 10

def bar(param1, param2):
     return foo(param1, param2)

def main():

   output = tp.run(NUMBER_OF_PROCESSES, bar, [(arg1[idx], arg2[idx],) for idx in range(100)], max_time = 100, delete_data = True)

main()