import%20marimo%0A%0A__generated_with%20%3D%20%220.24.0%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20atexit%0A%20%20%20%20import%20concurrent.futures%20as%20cf%0A%20%20%20%20import%20hashlib%0A%20%20%20%20import%20json%0A%20%20%20%20import%20socket%0A%20%20%20%20import%20sys%0A%20%20%20%20import%20time%0A%20%20%20%20import%20warnings%0A%20%20%20%20from%20functools%20import%20partial%0A%20%20%20%20from%20http.server%20import%20SimpleHTTPRequestHandler%2C%20ThreadingHTTPServer%0A%20%20%20%20from%20multiprocessing%20import%20Array%2C%20Manager%2C%20Process%2C%20Value%2C%20get_context%0A%20%20%20%20from%20pathlib%20import%20Path%0A%20%20%20%20from%20threading%20import%20Thread%0A%0A%20%20%20%20import%20dask.dataframe%20as%20dd%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20orjson%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20import%20requests%0A%20%20%20%20from%20numba%20import%20cuda%2C%20njit%2C%20prange%0A%20%20%20%20from%20tqdm.contrib.concurrent%20import%20process_map%2C%20thread_map%0A%0A%20%20%20%20notebook_dir%20%3D%20Path(__file__).resolve().parent%20if%20%22__file__%22%20in%20globals()%20else%20Path.cwd()%0A%20%20%20%20repo_root%20%3D%20notebook_dir.parents%5B1%5D%0A%20%20%20%20data_dir%20%3D%20repo_root%20%2F%20%22data%22%20%2F%20%22others%22%20%2F%20%22rapid_python%22%0A%20%20%20%20data_dir.mkdir(parents%3DTrue%2C%20exist_ok%3DTrue)%0A%20%20%20%20warnings.filterwarnings(%0A%20%20%20%20%20%20%20%20%22ignore%22%2C%0A%20%20%20%20%20%20%20%20message%3Dr%22resource_tracker%3A%20There%20appear%20to%20be%20%5Cd%2B%20leaked%20semaphore%20objects%20to%20clean%20up%20at%20shutdown%22%2C%0A%20%20%20%20%20%20%20%20category%3DUserWarning%2C%0A%20%20%20%20)%0A%20%20%20%20warnings.filterwarnings(%0A%20%20%20%20%20%20%20%20%22ignore%22%2C%0A%20%20%20%20%20%20%20%20category%3DUserWarning%2C%0A%20%20%20%20%20%20%20%20module%3Dr%22multiprocessing%5C.resource_tracker%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20SimpleHTTPRequestHandler%2C%0A%20%20%20%20%20%20%20%20Thread%2C%0A%20%20%20%20%20%20%20%20ThreadingHTTPServer%2C%0A%20%20%20%20%20%20%20%20atexit%2C%0A%20%20%20%20%20%20%20%20cf%2C%0A%20%20%20%20%20%20%20%20cuda%2C%0A%20%20%20%20%20%20%20%20data_dir%2C%0A%20%20%20%20%20%20%20%20dd%2C%0A%20%20%20%20%20%20%20%20get_context%2C%0A%20%20%20%20%20%20%20%20hashlib%2C%0A%20%20%20%20%20%20%20%20json%2C%0A%20%20%20%20%20%20%20%20mo%2C%0A%20%20%20%20%20%20%20%20njit%2C%0A%20%20%20%20%20%20%20%20np%2C%0A%20%20%20%20%20%20%20%20orjson%2C%0A%20%20%20%20%20%20%20%20partial%2C%0A%20%20%20%20%20%20%20%20pd%2C%0A%20%20%20%20%20%20%20%20prange%2C%0A%20%20%20%20%20%20%20%20requests%2C%0A%20%20%20%20%20%20%20%20socket%2C%0A%20%20%20%20%20%20%20%20sys%2C%0A%20%20%20%20%20%20%20%20thread_map%2C%0A%20%20%20%20%20%20%20%20time%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20SimpleHTTPRequestHandler%2C%0A%20%20%20%20Thread%2C%0A%20%20%20%20ThreadingHTTPServer%2C%0A%20%20%20%20atexit%2C%0A%20%20%20%20data_dir%2C%0A%20%20%20%20json%2C%0A%20%20%20%20np%2C%0A%20%20%20%20partial%2C%0A%20%20%20%20requests%2C%0A%20%20%20%20socket%2C%0A%20%20%20%20time%2C%0A)%3A%0A%20%20%20%20def%20timed_call(label%3A%20str%2C%20func%2C%20*args%2C%20**kwargs)%3A%0A%20%20%20%20%20%20%20%20start%20%3D%20time.perf_counter()%0A%20%20%20%20%20%20%20%20value%20%3D%20func(*args%2C%20**kwargs)%0A%20%20%20%20%20%20%20%20elapsed%20%3D%20time.perf_counter()%20-%20start%0A%20%20%20%20%20%20%20%20print(f%22%5B%7Blabel%7D%5D%20%7Belapsed%3A.3g%7D%20s%22)%0A%20%20%20%20%20%20%20%20return%20value%2C%20elapsed%0A%0A%20%20%20%20http_dir%20%3D%20data_dir%20%2F%20%22http_payloads%22%0A%20%20%20%20http_dir.mkdir(exist_ok%3DTrue)%0A%20%20%20%20rng_payload%20%3D%20np.random.default_rng(42)%0A%20%20%20%20for%20index%20in%20range(6)%3A%0A%20%20%20%20%20%20%20%20payload%20%3D%20%7B%22id%22%3A%20index%2C%20%22values%22%3A%20rng_payload.normal(size%3D8).round(4).tolist()%7D%0A%20%20%20%20%20%20%20%20(http_dir%20%2F%20f%22payload_%7Bindex%7D.json%22).write_text(json.dumps(payload)%2C%20encoding%3D%22utf-8%22)%0A%0A%20%20%20%20class%20QuietHandler(SimpleHTTPRequestHandler)%3A%0A%20%20%20%20%20%20%20%20def%20log_message(self%2C%20format%2C%20*args)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%0A%0A%20%20%20%20with%20socket.socket()%20as%20sock%3A%0A%20%20%20%20%20%20%20%20sock.bind((%22127.0.0.1%22%2C%200))%0A%20%20%20%20%20%20%20%20port%20%3D%20sock.getsockname()%5B1%5D%0A%20%20%20%20http_server%20%3D%20ThreadingHTTPServer((%22127.0.0.1%22%2C%20port)%2C%20partial(QuietHandler%2C%20directory%3Dstr(http_dir)))%0A%20%20%20%20server_thread%20%3D%20Thread(target%3Dhttp_server.serve_forever%2C%20daemon%3DTrue)%0A%20%20%20%20server_thread.start()%0A%20%20%20%20thread_urls%20%3D%20%5Bf%22http%3A%2F%2F127.0.0.1%3A%7Bport%7D%2Fpayload_%7Bindex%7D.json%22%20for%20index%20in%20range(6)%5D%0A%20%20%20%20requests.get(thread_urls%5B0%5D%2C%20timeout%3D5).raise_for_status()%0A%0A%20%20%20%20server_state%20%3D%20%7B%22closed%22%3A%20False%7D%0A%0A%20%20%20%20def%20cleanup_server()%3A%0A%20%20%20%20%20%20%20%20if%20server_state%5B%22closed%22%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%0A%20%20%20%20%20%20%20%20http_server.shutdown()%0A%20%20%20%20%20%20%20%20http_server.server_close()%0A%20%20%20%20%20%20%20%20server_thread.join(timeout%3D1)%0A%20%20%20%20%20%20%20%20server_state%5B%22closed%22%5D%20%3D%20True%0A%0A%20%20%20%20atexit.register(cleanup_server)%0A%20%20%20%20return%20cleanup_server%2C%20thread_urls%2C%20timed_call%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20Python%20%E9%AB%98%E9%80%9F%E5%8C%96%E3%83%A1%E3%83%A2%0A%0A%20%20%20%20Colab%20%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%82%92%E9%99%A4%E5%8E%BB%E3%81%97%E3%80%81CPU%20%2F%20GPU%20%2F%20%E4%B8%A6%E5%88%97%E5%87%A6%E7%90%86%20%2F%20%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AD%E3%83%BC%E3%83%89%E3%81%AE%E4%BE%8B%E3%82%92%0A%20%20%20%20marimo%20%E3%81%A7%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%20headless%20%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E6%95%B4%E7%90%86%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(njit%2C%20pd%2C%20sys%2C%20timed_call)%3A%0A%20%20%20%20sys.setrecursionlimit(100000)%0A%0A%20%20%20%20def%20ack(m%3A%20int%2C%20n%3A%20int)%3A%0A%20%20%20%20%20%20%20%20if%20m%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20n%20%2B%201%0A%20%20%20%20%20%20%20%20if%20n%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20ack(m%20-%201%2C%201)%0A%20%20%20%20%20%20%20%20return%20ack(m%20-%201%2C%20ack(m%2C%20n%20-%201))%0A%0A%20%20%20%20_%2C%20base_elapsed%20%3D%20timed_call(%22ack(3%2C%2010)%22%2C%20ack%2C%203%2C%2010)%0A%0A%20%20%20%20%40njit(cache%3DFalse)%0A%20%20%20%20def%20lazy_ack(m%2C%20n)%3A%0A%20%20%20%20%20%20%20%20if%20m%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20n%20%2B%201%0A%20%20%20%20%20%20%20%20if%20n%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20lazy_ack(m%20-%201%2C%201)%0A%20%20%20%20%20%20%20%20return%20lazy_ack(m%20-%201%2C%20lazy_ack(m%2C%20n%20-%201))%0A%0A%20%20%20%20_%2C%20lazy_first%20%3D%20timed_call(%22lazy%20njit%20first%22%2C%20lazy_ack%2C%203%2C%2010)%0A%20%20%20%20_%2C%20lazy_second%20%3D%20timed_call(%22lazy%20njit%20second%22%2C%20lazy_ack%2C%203%2C%2010)%0A%0A%20%20%20%20%40njit(%22int32(int32%2C%20int32)%22%2C%20cache%3DFalse)%0A%20%20%20%20def%20eager_ack(m%2C%20n)%3A%0A%20%20%20%20%20%20%20%20if%20m%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20n%20%2B%201%0A%20%20%20%20%20%20%20%20if%20n%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20eager_ack(m%20-%201%2C%201)%0A%20%20%20%20%20%20%20%20return%20eager_ack(m%20-%201%2C%20eager_ack(m%2C%20n%20-%201))%0A%0A%20%20%20%20_%2C%20eager_first%20%3D%20timed_call(%22typed%20njit%20first%22%2C%20eager_ack%2C%203%2C%2010)%0A%20%20%20%20_%2C%20eager_second%20%3D%20timed_call(%22typed%20njit%20second%22%2C%20eager_ack%2C%203%2C%2010)%0A%20%20%20%20pd.DataFrame(%5B%0A%20%20%20%20%20%20%20%20%7B%22case%22%3A%20%22python%22%2C%20%22elapsed_s%22%3A%20base_elapsed%7D%2C%0A%20%20%20%20%20%20%20%20%7B%22case%22%3A%20%22lazy_njit_first%22%2C%20%22elapsed_s%22%3A%20lazy_first%7D%2C%0A%20%20%20%20%20%20%20%20%7B%22case%22%3A%20%22lazy_njit_second%22%2C%20%22elapsed_s%22%3A%20lazy_second%7D%2C%0A%20%20%20%20%20%20%20%20%7B%22case%22%3A%20%22typed_njit_first%22%2C%20%22elapsed_s%22%3A%20eager_first%7D%2C%0A%20%20%20%20%20%20%20%20%7B%22case%22%3A%20%22typed_njit_second%22%2C%20%22elapsed_s%22%3A%20eager_second%7D%2C%0A%20%20%20%20%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(njit%2C%20pd%2C%20prange%2C%20timed_call)%3A%0A%20%20%20%20def%20double_sum(size%3A%20int)%3A%0A%20%20%20%20%20%20%20%20total%20%3D%200%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(size)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20j%20in%20range(size)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20total%20%2B%3D%20i%20-%20j%0A%20%20%20%20%20%20%20%20return%20total%0A%0A%20%20%20%20%40njit(%22int32(int32)%22%2C%20cache%3DFalse)%0A%20%20%20%20def%20double_sum_njit(size)%3A%0A%20%20%20%20%20%20%20%20total%20%3D%200%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(size)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20j%20in%20range(size)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20total%20%2B%3D%20i%20-%20j%0A%20%20%20%20%20%20%20%20return%20total%0A%0A%20%20%20%20%40njit(%22int32(int32)%22%2C%20cache%3DFalse%2C%20parallel%3DTrue%2C%20fastmath%3DTrue)%0A%20%20%20%20def%20double_sum_fast(size)%3A%0A%20%20%20%20%20%20%20%20total%20%3D%200%0A%20%20%20%20%20%20%20%20for%20i%20in%20prange(size)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20j%20in%20range(size)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20total%20%2B%3D%20i%20-%20j%0A%20%20%20%20%20%20%20%20return%20total%0A%0A%20%20%20%20size%20%3D%204000%0A%20%20%20%20answer_python%2C%20elapsed_python%20%3D%20timed_call(%22double_sum%20python%22%2C%20double_sum%2C%20size)%0A%20%20%20%20answer_njit%2C%20elapsed_njit%20%3D%20timed_call(%22double_sum%20njit%22%2C%20double_sum_njit%2C%20size)%0A%20%20%20%20answer_fast%2C%20elapsed_fast%20%3D%20timed_call(%22double_sum%20fast%22%2C%20double_sum_fast%2C%20size)%0A%20%20%20%20pd.DataFrame(%5B%0A%20%20%20%20%20%20%20%20%7B%22case%22%3A%20%22python%22%2C%20%22answer%22%3A%20answer_python%2C%20%22elapsed_s%22%3A%20elapsed_python%7D%2C%0A%20%20%20%20%20%20%20%20%7B%22case%22%3A%20%22njit%22%2C%20%22answer%22%3A%20answer_njit%2C%20%22elapsed_s%22%3A%20elapsed_njit%7D%2C%0A%20%20%20%20%20%20%20%20%7B%22case%22%3A%20%22parallel_fastmath%22%2C%20%22answer%22%3A%20answer_fast%2C%20%22elapsed_s%22%3A%20elapsed_fast%7D%2C%0A%20%20%20%20%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cuda%2C%20np%2C%20pd%2C%20timed_call)%3A%0A%20%20%20%20gpu_rows%20%3D%20%5B%5D%0A%20%20%20%20if%20not%20cuda.is_available()%3A%0A%20%20%20%20%20%20%20%20gpu_rows.append(%7B%22backend%22%3A%20%22cuda%22%2C%20%22status%22%3A%20%22not%20available%22%2C%20%22elapsed_s%22%3A%20None%7D)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%40cuda.jit%0A%20%20%20%20%20%20%20%20def%20add_kernel(a%2C%20b%2C%20c)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20index%20%3D%20cuda.grid(1)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20index%20%3C%20c.size%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20c%5Bindex%5D%20%3D%20a%5Bindex%5D%20%2B%20b%5Bindex%5D%0A%0A%20%20%20%20%20%20%20%20def%20add_arrays_gpu(a%2C%20b%2C%20threads_per_block%3D256)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20blocks%20%3D%20(a.size%20%2B%20threads_per_block%20-%201)%20%2F%2F%20threads_per_block%0A%20%20%20%20%20%20%20%20%20%20%20%20out%20%3D%20cuda.to_device(np.zeros_like(a))%0A%20%20%20%20%20%20%20%20%20%20%20%20add_kernel%5Bblocks%2C%20threads_per_block%5D(cuda.to_device(a)%2C%20cuda.to_device(b)%2C%20out)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20out.copy_to_host()%0A%0A%20%20%20%20%20%20%20%20array_size%20%3D%202_000_000%0A%20%20%20%20%20%20%20%20left%20%3D%20np.ones(array_size%2C%20dtype%3Dnp.float32)%0A%20%20%20%20%20%20%20%20right%20%3D%20np.ones(array_size%2C%20dtype%3Dnp.float32)%0A%20%20%20%20%20%20%20%20_%2C%20cpu_elapsed%20%3D%20timed_call(%22cpu%20vector%20add%22%2C%20lambda%3A%20left%20%2B%20right)%0A%20%20%20%20%20%20%20%20gpu_rows.append(%7B%22backend%22%3A%20%22cpu%22%2C%20%22status%22%3A%20%22ok%22%2C%20%22elapsed_s%22%3A%20cpu_elapsed%7D)%0A%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_%2C%20gpu_elapsed%20%3D%20timed_call(%22gpu%20vector%20add%22%2C%20add_arrays_gpu%2C%20left%2C%20right)%0A%20%20%20%20%20%20%20%20except%20Exception%20as%20exc%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20gpu_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22backend%22%3A%20%22cuda%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22status%22%3A%20f%22error%3A%20%7Bexc.__class__.__name__%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22elapsed_s%22%3A%20None%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20gpu_rows.append(%7B%22backend%22%3A%20%22cuda%22%2C%20%22status%22%3A%20%22ok%22%2C%20%22elapsed_s%22%3A%20gpu_elapsed%7D)%0A%20%20%20%20pd.DataFrame(gpu_rows)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cf%2C%20get_context%2C%20hashlib%2C%20mo%2C%20partial%2C%20pd)%3A%0A%20%20%20%20mo.md(%22%23%23%20concurrent.futures%20%E3%81%A7%E3%81%AE%E9%AB%98%E9%80%9F%E5%8C%96%22)%0A%20%20%20%20cpu_tasks%20%3D%20%5B60_000%2C%2065_000%2C%2070_000%2C%2075_000%2C%2080_000%2C%2085_000%5D%0A%20%20%20%20_digest_worker_executor%20%3D%20partial(hashlib.pbkdf2_hmac%2C%20%22sha256%22%2C%20b%22marimo%22%2C%20b%22parallel%22%2C%20dklen%3D32)%0A%20%20%20%20worker_rows%20%3D%20%5B%5D%0A%20%20%20%20for%20_process_workers%20in%20%5B1%2C%202%2C%204%5D%3A%0A%20%20%20%20%20%20%20%20start%20%3D%20__import__(%22time%22).perf_counter()%0A%20%20%20%20%20%20%20%20with%20cf.ProcessPoolExecutor(max_workers%3D_process_workers%2C%20mp_context%3Dget_context(%22fork%22))%20as%20_process_executor%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20list(_process_executor.map(_digest_worker_executor%2C%20cpu_tasks))%0A%20%20%20%20%20%20%20%20worker_rows.append(%7B%22max_workers%22%3A%20_process_workers%2C%20%22elapsed_s%22%3A%20__import__(%22time%22).perf_counter()%20-%20start%7D)%0A%20%20%20%20print(f%22CPU%20count%20is%20%7B__import__('os').cpu_count()%7D%22)%0A%20%20%20%20pd.DataFrame(worker_rows)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cf%2C%20pd%2C%20requests%2C%20thread_urls%2C%20timed_call)%3A%0A%20%20%20%20def%20fetch_status(url%3A%20str)%3A%0A%20%20%20%20%20%20%20%20response%20%3D%20requests.get(url%2C%20timeout%3D5)%0A%20%20%20%20%20%20%20%20response.raise_for_status()%0A%20%20%20%20%20%20%20%20return%20%7B%22url%22%3A%20url.rsplit(%22%2F%22%2C%201)%5B-1%5D%2C%20%22status_code%22%3A%20response.status_code%2C%20%22bytes%22%3A%20len(response.content)%7D%0A%0A%20%20%20%20def%20fetch_all(urls%2C%20max_workers%3A%20int)%3A%0A%20%20%20%20%20%20%20%20with%20cf.ThreadPoolExecutor(max_workers%3Dmax_workers)%20as%20_thread_executor%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20list(_thread_executor.map(fetch_status%2C%20urls))%0A%0A%20%20%20%20timing_rows%20%3D%20%5B%5D%0A%20%20%20%20last_statuses%20%3D%20None%0A%20%20%20%20for%20_thread_workers%20in%20%5B1%2C%202%2C%204%2C%208%5D%3A%0A%20%20%20%20%20%20%20%20statuses%2C%20elapsed%20%3D%20timed_call(%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22thread%20pool%20max_workers%3D%7B_thread_workers%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20fetch_all%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20thread_urls%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_thread_workers%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20timing_rows.append(%7B%22max_workers%22%3A%20_thread_workers%2C%20%22elapsed_s%22%3A%20elapsed%7D)%0A%20%20%20%20%20%20%20%20last_statuses%20%3D%20statuses%0A%20%20%20%20pd.DataFrame(last_statuses)%0A%20%20%20%20pd.DataFrame(timing_rows)%0A%20%20%20%20return%20(fetch_status%2C)%0A%0A%0A%40app.cell%0Adef%20_(cleanup_server%2C%20fetch_status%2C%20get_context%2C%20pd%2C%20thread_map%2C%20thread_urls)%3A%0A%20%20%20%20thread_map_rows%20%3D%20thread_map(fetch_status%2C%20thread_urls%2C%20max_workers%3D8%2C%20disable%3DTrue)%0A%20%20%20%20_fork_context%20%3D%20get_context(%22fork%22)%0A%0A%20%20%20%20def%20shared_memory_target(number%2C%20array)%3A%0A%20%20%20%20%20%20%20%20number.value%20%3D%203.1415927%0A%20%20%20%20%20%20%20%20for%20index%20in%20range(len(array))%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20array%5Bindex%5D%20%3D%20-array%5Bindex%5D%0A%0A%20%20%20%20shared_number%20%3D%20_fork_context.Value(%22d%22%2C%200.0%2C%20lock%3DFalse)%0A%20%20%20%20shared_array%20%3D%20_fork_context.Array(%22i%22%2C%20range(10)%2C%20lock%3DFalse)%0A%20%20%20%20process%20%3D%20_fork_context.Process(target%3Dshared_memory_target%2C%20args%3D(shared_number%2C%20shared_array))%0A%20%20%20%20process.start()%0A%20%20%20%20process.join()%0A%20%20%20%20process.close()%0A%0A%20%20%20%20def%20pipe_target(index%2C%20send_end)%3A%0A%20%20%20%20%20%20%20%20send_end.send(%7B%22index%22%3A%20index%2C%20%22negated%22%3A%20-index%7D)%0A%20%20%20%20%20%20%20%20send_end.close()%0A%0A%20%20%20%20_pipe_endpoints%20%3D%20%5B%5D%0A%20%20%20%20_pipe_processes%20%3D%20%5B%5D%0A%20%20%20%20for%20_pipe_index%20in%20range(4)%3A%0A%20%20%20%20%20%20%20%20_recv_end%2C%20_send_end%20%3D%20_fork_context.Pipe(duplex%3DFalse)%0A%20%20%20%20%20%20%20%20_pipe_process%20%3D%20_fork_context.Process(target%3Dpipe_target%2C%20args%3D(_pipe_index%2C%20_send_end))%0A%20%20%20%20%20%20%20%20_pipe_process.start()%0A%20%20%20%20%20%20%20%20_send_end.close()%0A%20%20%20%20%20%20%20%20_pipe_endpoints.append(_recv_end)%0A%20%20%20%20%20%20%20%20_pipe_processes.append(_pipe_process)%0A%20%20%20%20pipe_messages%20%3D%20%5B_recv_end.recv()%20for%20_recv_end%20in%20_pipe_endpoints%5D%0A%20%20%20%20for%20_recv_end%20in%20_pipe_endpoints%3A%0A%20%20%20%20%20%20%20%20_recv_end.close()%0A%20%20%20%20for%20_pipe_process%20in%20_pipe_processes%3A%0A%20%20%20%20%20%20%20%20_pipe_process.join()%0A%20%20%20%20%20%20%20%20_pipe_process.close()%0A%0A%20%20%20%20cleanup_server()%0A%20%20%20%20pd.DataFrame(thread_map_rows)%0A%20%20%20%20pd.DataFrame(%5B%0A%20%20%20%20%20%20%20%20%7B%22shared_number%22%3A%20shared_number.value%2C%20%22shared_array_head%22%3A%20list(shared_array)%5B%3A5%5D%2C%20%22pipe_messages%22%3A%20str(pipe_messages)%7D%0A%20%20%20%20%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(data_dir%2C%20dd%2C%20json%2C%20np%2C%20orjson%2C%20pd%2C%20timed_call)%3A%0A%20%20%20%20rng_data%20%3D%20np.random.default_rng(0)%0A%20%20%20%20csv_path%20%3D%20data_dir%20%2F%20%22diamonds.csv%22%0A%20%20%20%20json_path%20%3D%20data_dir%20%2F%20%22large-file.json%22%0A%20%20%20%20csv_frame%20%3D%20pd.DataFrame(%7B%0A%20%20%20%20%20%20%20%20%22carat%22%3A%20rng_data.uniform(0.2%2C%202.5%2C%20size%3D20000).round(3)%2C%0A%20%20%20%20%20%20%20%20%22depth%22%3A%20rng_data.uniform(55.0%2C%2070.0%2C%20size%3D20000).round(3)%2C%0A%20%20%20%20%20%20%20%20%22table%22%3A%20rng_data.uniform(50.0%2C%2070.0%2C%20size%3D20000).round(3)%2C%0A%20%20%20%20%20%20%20%20%22price%22%3A%20rng_data.integers(300%2C%2018000%2C%20size%3D20000)%2C%0A%20%20%20%20%7D)%0A%20%20%20%20csv_frame.to_csv(csv_path%2C%20index%3DFalse)%0A%20%20%20%20json_payload%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%7B%22id%22%3A%20int(index)%2C%20%22value%22%3A%20float(value)%2C%20%22square%22%3A%20float(value**2)%7D%0A%20%20%20%20%20%20%20%20for%20index%2C%20value%20in%20enumerate(rng_data.normal(size%3D5000))%0A%20%20%20%20%5D%0A%20%20%20%20json_path.write_text(json.dumps(json_payload%2C%20ensure_ascii%3DFalse)%2C%20encoding%3D%22utf-8%22)%0A%0A%20%20%20%20_%2C%20pandas_elapsed%20%3D%20timed_call(%22pandas.read_csv%22%2C%20pd.read_csv%2C%20csv_path)%0A%20%20%20%20_%2C%20dask_elapsed%20%3D%20timed_call(%22dask.read_csv%22%2C%20lambda%3A%20dd.read_csv(csv_path).compute())%0A%20%20%20%20_%2C%20json_elapsed%20%3D%20timed_call(%22json.load%22%2C%20lambda%3A%20json.loads(json_path.read_text(encoding%3D%22utf-8%22)))%0A%20%20%20%20data_orjson%2C%20orjson_elapsed%20%3D%20timed_call(%22orjson.loads%22%2C%20lambda%3A%20orjson.loads(json_path.read_bytes()))%0A%20%20%20%20_%2C%20dump_elapsed%20%3D%20timed_call(%0A%20%20%20%20%20%20%20%20%22json.dump%22%2C%0A%20%20%20%20%20%20%20%20lambda%3A%20(data_dir%20%2F%20%22large-file.standard.json%22).write_text(json.dumps(data_orjson)%2C%20encoding%3D%22utf-8%22)%2C%0A%20%20%20%20)%0A%20%20%20%20_%2C%20orjson_dump_elapsed%20%3D%20timed_call(%0A%20%20%20%20%20%20%20%20%22orjson.dumps%22%2C%0A%20%20%20%20%20%20%20%20lambda%3A%20(data_dir%20%2F%20%22large-file.orjson.json%22).write_bytes(orjson.dumps(data_orjson))%2C%0A%20%20%20%20)%0A%20%20%20%20pd.DataFrame(%5B%0A%20%20%20%20%20%20%20%20%7B%22task%22%3A%20%22pandas.read_csv%22%2C%20%22elapsed_s%22%3A%20pandas_elapsed%7D%2C%0A%20%20%20%20%20%20%20%20%7B%22task%22%3A%20%22dask.read_csv%22%2C%20%22elapsed_s%22%3A%20dask_elapsed%7D%2C%0A%20%20%20%20%20%20%20%20%7B%22task%22%3A%20%22json.load%22%2C%20%22elapsed_s%22%3A%20json_elapsed%7D%2C%0A%20%20%20%20%20%20%20%20%7B%22task%22%3A%20%22orjson.loads%22%2C%20%22elapsed_s%22%3A%20orjson_elapsed%7D%2C%0A%20%20%20%20%20%20%20%20%7B%22task%22%3A%20%22json.dump%22%2C%20%22elapsed_s%22%3A%20dump_elapsed%7D%2C%0A%20%20%20%20%20%20%20%20%7B%22task%22%3A%20%22orjson.dumps%22%2C%20%22elapsed_s%22%3A%20orjson_dump_elapsed%7D%2C%0A%20%20%20%20%5D)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
82baf4dc0bd3348b25e0a4c119a093ff