Function to call a list of callables with retry
You are not allowed to remove items from a list while iterating over the list. 

&gt;&gt;&gt; a = [“a”, ”b”, ”c”, ”d”]
&gt;&gt;&gt; for b in a:
...   print(a,b)
...   a.remove(b)
... 
['a', 'b', 'c', 'd'] a
['b', 'c', 'd'] c
&gt;&gt;&gt; 


You should wait to remove the callable_obj from callable_objs until after the for loop completes.  Build a list of callable_obj to remove, and bulk remove them at the end.  Or use list comprehension and filter out the successful calls:

callable_objs = [ obj for obj in callable_objs if not success_tracker[obj] ]