Skip to content

Instantly share code, notes, and snippets.

@mpage
Created May 10, 2024 05:18
Show Gist options
  • Save mpage/87abe9c2826810af5997248a5d00616d to your computer and use it in GitHub Desktop.
Save mpage/87abe9c2826810af5997248a5d00616d to your computer and use it in GitHub Desktop.
from multiprocessing import Process
from threading import Thread
try:
import _xxsubinterpreters as interpreters
except ImportError:
import _interpreters as interpreters
import itertools
DEFAULT_DIGITS = 2000
icount = itertools.count
islice = itertools.islice
def gen_x():
return map(lambda k: (k, 4 * k + 2, 0, 2 * k + 1), icount(1))
def compose(a, b):
aq, ar, as_, at = a
bq, br, bs, bt = b
return (aq * bq,
aq * br + ar * bt,
as_ * bq + at * bs,
as_ * br + at * bt)
def extract(z, j):
q, r, s, t = z
return (q * j + r) // (s * j + t)
def gen_pi_digits():
z = (1, 0, 0, 1)
x = gen_x()
while 1:
y = extract(z, 3)
while y != extract(z, 4):
z = compose(z, next(x))
y = extract(z, 3)
z = compose((10, -10 * y, 0, 1), z)
yield y
def calc_ndigits(n=DEFAULT_DIGITS):
return list(islice(gen_pi_digits(), n))
def bench_threading(n):
# Code to launch specific model
threads = []
for _ in range(n):
t = Thread(target=calc_ndigits)
t.start()
threads.append(t)
for thread in threads:
thread.join()
if __name__ == "__main__":
bench_threading(10)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment