import sys
class multi_threaded:
def __init__(self, count):
self.count = count
def __enter__(self):
self.old_locals = sys._getframe(1).f_locals.copy()
def __exit__(self, exc_type, exc_val, exc_tb):
new_locals = sys._getframe(1).f_locals
funcs = list(map(new_locals.get, new_locals.keys() - self.old_locals.keys()))
my_slice = int(self.count / len(funcs))
for i, func in enumerate(funcs):
start = my_slice * i
func(start, start + my_slice)
def spawn_many():
dataset = [1, 2, 3, 4, 5]
with multi_threaded(len(dataset)):
def foo(start_idx, end):
print("foo" + str(dataset[start_idx : end]))
def bar(start_idx, end):
print("bar" + str(dataset[start_idx : end]))
spawn_many()
aW1wb3J0IHN5cwoKY2xhc3MgbXVsdGlfdGhyZWFkZWQ6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY291bnQpOgogICAgICAgIHNlbGYuY291bnQgPSBjb3VudAoKICAgIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICAgICAgc2VsZi5vbGRfbG9jYWxzID0gc3lzLl9nZXRmcmFtZSgxKS5mX2xvY2Fscy5jb3B5KCkKCiAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190Yik6CiAgICAgICAgbmV3X2xvY2FscyA9IHN5cy5fZ2V0ZnJhbWUoMSkuZl9sb2NhbHMKICAgICAgICBmdW5jcyA9IGxpc3QobWFwKG5ld19sb2NhbHMuZ2V0LCBuZXdfbG9jYWxzLmtleXMoKSAtIHNlbGYub2xkX2xvY2Fscy5rZXlzKCkpKQogICAgICAgIG15X3NsaWNlID0gaW50KHNlbGYuY291bnQgLyBsZW4oZnVuY3MpKQogICAgICAgIGZvciBpLCBmdW5jIGluIGVudW1lcmF0ZShmdW5jcyk6CiAgICAgICAgICAgIHN0YXJ0ID0gbXlfc2xpY2UgKiBpCiAgICAgICAgICAgIGZ1bmMoc3RhcnQsIHN0YXJ0ICsgbXlfc2xpY2UpCgpkZWYgc3Bhd25fbWFueSgpOgogICAgZGF0YXNldCA9IFsxLCAyLCAzLCA0LCA1XQogICAgd2l0aCBtdWx0aV90aHJlYWRlZChsZW4oZGF0YXNldCkpOgogICAgICAgIGRlZiBmb28oc3RhcnRfaWR4LCBlbmQpOgogICAgICAgICAgICBwcmludCgiZm9vIiArIHN0cihkYXRhc2V0W3N0YXJ0X2lkeCA6IGVuZF0pKQogICAgICAgIGRlZiBiYXIoc3RhcnRfaWR4LCBlbmQpOgogICAgICAgICAgICBwcmludCgiYmFyIiArIHN0cihkYXRhc2V0W3N0YXJ0X2lkeCA6IGVuZF0pKQoKc3Bhd25fbWFueSgp