Slide 28
Slide 28 text
Same Code, Different Results
27
GIL:
Expected: 200000, Actual: 200000
Free-threaded:
Expected: 200000, Actual: 103725
import threading
counter = 0
def worker(n: int) -> None:
global counter
for _ in range(n):
counter += 1
if __name__ == "__main__":
N = 100_000
t1, t2 = [threading.Thread(target=worker, args=(N,)) for _ in range(2)]
t1.start(); t2.start(); t1.join(); t2.join()
print(f"Expected: {2*N}, Actual: {counter}")