from concurrent.futures import ThreadPoolExecutor
from functools import partial
def call_fn(fn):
fn()
def main():
arr = []
for i in range(10):
def fn(j):
print(j)
arr.append(
partial(fn, i)
)
with ThreadPoolExecutor(4) as ex:
list(ex.map(
call_fn,
arr
))
def faulty():
arr = []
for i in range(10):
def fn():
print(i)
arr.append(fn)
with ThreadPoolExecutor(4) as ex:
list(ex.map(
call_fn,
arr
))
if __name__ == "__main__":
print("faulty")
faulty()
print("main")
main()
fix closure bug
see a simplified reproduction:
prints