Last active
October 5, 2021 19:10
-
-
Save dfulu/14ae9b5aa2633226519956ce6ef04ce6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "\n", | |
| "\n", | |
| "Recently I have been writing some teaching material on how to do Parallel processing and multi-threading using Dask. As part of this I was trying to understand how these work in Python a little better and to run some speed tests on different tasks using different methods.\n", | |
| "\n", | |
| "There is a fantastic [medium post by Brendon Fortuner](https://medium.com/@bfortuner/python-multithreading-vs-multiprocessing-73072ce5600b), which explained a lot of things, but I really wanted to dive a little deeper and understand things more." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import dask\n", | |
| "from dask import delayed" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "First out, I want to make this really reproduceable. So lets talk about the very basics of Dask. Dask is a package which allows you to run task using parallel processing or multi-threading. (It also lets you run computations in a distributed way, but thats outside the scope of this). \n", | |
| "\n", | |
| "Here are some quick Dask examples." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def fraction_to_percent(x):\n", | |
| " percentage = x * 100\n", | |
| " print('Converting to percentage')\n", | |
| " return x\n", | |
| "\n", | |
| "# Create a dask lazy evaluated pipeline\n", | |
| "percentage = delayed(fraction_to_percent)(0.3)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Dask uses lazy evaluation, which means that the calculation of converting 0.3 to a percentage hasn't actually happened yet." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Delayed('fraction_to_percent-b32502a4-4f51-4ede-aa11-1047f1f02500')\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "print(percentage)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "The `percentage` is a delayed object." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Converting to percentage\n", | |
| "0.3\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "print(percentage.compute())" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "It is only when we run the compute method when Dask runs the function and the print statement (and the conversion) are run.\n", | |
| "\n", | |
| "Dask uses multi-threading by default, but we can control this." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Converting to percentage\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "0.3" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "percentage.compute(scheduler=\"threading\") # using multi-threadin" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Converting to percentage\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "0.3" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "percentage.compute(scheduler=\"threading\") # use parallel pocessing" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Obviously, this doesn't doesn't make sense to use parallel processing or multi-threading for this super basic calculation, but makes sense when we are doing many of them." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "percentages = [delayed(fraction_to_percent)(x) for x in [0.1, 0.2, 0.3, 0.4, 0.5]]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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zfLy8jIdxy50795dsbGxiouL47mEwB0kJSWpWbNmyps3r6KiopQ3b17TkYw7deqUvL291atXL02cONF0HMAuxcbGqlmzZvr000/19ttvm45jF+grwP3RV/6OvgLcm4m+YpOx88SJE6pbt64GDx6s//f//l9uHw5wWKmpqWrVqpVu3rypTZs2ufxoMWnSJL3wwgtau3atfH19TccB7Nbu3bvVuHFjjRo1Sh988IHpOEZZliU/Pz8dO3ZM27ZtU8GCBU1HAuzWv/71L73//vvavHmz6tWrZzqOUfQVIHPoK39GXwEyx9Z9xSZjZ5cuXXTo0CHFxsYqf/78uX04wKEdPHhQ3t7e+uCDD/TOO++YjmPMqVOnVLt2bQ0bNkxffPGF6TiA3Rs/frzeeecdbd++XbVr1zYdx5hp06ZpyJAhioqKUtOmTU3HAexaenq6WrZsqeTkZMXExLj0y9npK0Dm0Vd+R18BssaWfSXXx87Zs2erf//+Wrt2rVq0aJGbhwKcxtixYzV69GjFxsaqVq1apuMY0bNnT+3YsUMJCQncmQVkQnp6unx9fZWenq7o6GiXfOfxCxcuqFatWurXr5/Gjx9vOg7gEPbt26f69etrzJgxev31103HMYK+AmQdfYW+AmSVLftKro6dFy9eVO3atdWrVy/98MMPuXUYwOmkpqaqadOmKly4sH755ReXe7fD+fPnq3fv3lq1apXat29vOg7gMBISEtSwYUOXfeOAoKAgbdq0STt37lShQoVMxwEcxscff6wvvvhC8fHxqlKliuk4NkVfAbKHvkJfAbLDVn0lV8fO/v376+eff9bu3btVrFix3DoM4JTi4uLUuHFjff/99xo6dKjpODZz5coV1alTR/7+/goODjYdB3A47733nv79739r165dKl++vOk4NhMeHq4uXbooLCxMXbp0MR0HcCjJyclq0KCBSpcurdWrV7vUaEFfAbKPvkJfAbLDFn0l18bO1atXq0OHDlqyZIm6deuWG4cAnN6bb76pyZMna9++fSpVqpTpODYxbNgwhYWFaffu3bybIZANt27dUr169VSrVi0tXrzYdBybuH79umrWrKnWrVtr5syZpuMADikmJka+vr6aMWOG+vbtazqOTdBXgAdHX6GvAFlli76SK2Nnamqq6tevrypVqmjJkiU5/ekBl3H9+nXVqFFDnTt31n//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\n", | |
| "text/plain": [ | |
| "<IPython.core.display.Image object>" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dask.visualize(percentages)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Converting to percentageConverting to percentage\n", | |
| "\n", | |
| "Converting to percentage\n", | |
| "Converting to percentage\n", | |
| "Converting to percentage\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "([0.1, 0.2, 0.3, 0.4, 0.5],)" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dask.compute(percentages)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Here the the computation could actually be split across multiple thread or processes." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "That's all the basic Dask I'm going to cover. You can find more about Dask in the excellent [Dask tutorial from SciPy 2020](https://www.youtube.com/watch?v=EybGGLbLipI&ab_channel=Enthought).\n", | |
| "\n", | |
| "Now we'll move on with the experiments for the article." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import string\n", | |
| "import glob\n", | |
| "import os\n", | |
| "import time\n", | |
| "\n", | |
| "import pandas as pd \n", | |
| "import numpy as np\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "\n", | |
| "import dask\n", | |
| "from dask import delayed \n", | |
| "from dask.distributed import Client" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "We will be saving and loading stuff to/from here" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "temp_dir = \"temp\"\n", | |
| "os.makedirs(temp_dir)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Now we'll write up all the function we want to speed test." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def random_file_name(extension):\n", | |
| " # 5 random lower case letters\n", | |
| " random_letters = ''.join(np.random.choice(list(string.ascii_lowercase), 5))\n", | |
| " return f\"{temp_dir}/{random_letters}{extension}\"\n", | |
| "\n", | |
| "def numpy_cpu_heavy_function(n, *args, **kawrgs):\n", | |
| " \"\"\"Runs a CPU intensive calculation, but involves no data input or output.\"\"\"\n", | |
| " x = np.linalg.inv(np.random.normal(0, 1, (n,n)))\n", | |
| " return None\n", | |
| "\n", | |
| "def basic_python_loop(n, *args, **kawrgs):\n", | |
| " \"\"\"Runs simple native Python loop which is memory light and involves no data input or output.\"\"\"\n", | |
| " mydict = {}\n", | |
| " for i in range(n):\n", | |
| " mydict[i%10] = i\n", | |
| " return None\n", | |
| " \n", | |
| "def save_text_data(n, *args, **kawrgs):\n", | |
| " \"\"\"Creates and saves n short lines of text data.\"\"\"\n", | |
| " text = \"This is a line of text\\n\"*n\n", | |
| " file = random_file_name('.txt')\n", | |
| " with open(file, 'wt', encoding='utf-8') as f:\n", | |
| " f.write(text)\n", | |
| " return None\n", | |
| " \n", | |
| "def load_text_data(*args, **kawrgs):\n", | |
| " \"\"\"Loads, but do not return, text data from file created using `save_text_data()`.\"\"\"\n", | |
| " file = np.random.choice(glob.glob(f\"{temp_dir}/*.txt\"))\n", | |
| " with open(file, 'r', encoding='utf-8') as f:\n", | |
| " text = f.readlines()\n", | |
| " return None\n", | |
| " \n", | |
| "def transfer_data(x, *args, **kawrgs):\n", | |
| " \"\"\"Transfer data into and out of a function.\"\"\"\n", | |
| " return x*2\n", | |
| "\n", | |
| "def save_csv(n, *args, **kawrgs):\n", | |
| " \"\"\"Create a 10 column, n row, dataset and save it to CSV.\"\"\"\n", | |
| " file = random_file_name('.csv')\n", | |
| " df = pd.DataFrame(np.random.normal(0,1,(n, 10)))\n", | |
| " df.to_csv(file)\n", | |
| " return None\n", | |
| "\n", | |
| "def load_csv(*args, **kawrgs):\n", | |
| " \"\"\"Load, but do not return, a CSV saved using the `save_csv()` function.\"\"\"\n", | |
| " file = np.random.choice(glob.glob(f\"{temp_dir}/*.csv\"))\n", | |
| " df = pd.read_csv(file)\n", | |
| " return None" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Extra material, explore how long it takes to run Numba version of basic python function" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import numba as nb\n", | |
| "\n", | |
| "# Numba should make this much faster than the basic Python version\n", | |
| "@nb.jit()\n", | |
| "def numba_loop_gil(n):\n", | |
| " \"\"\"Runs simple native Python loop which is memory light and involves no data input or output.\"\"\"\n", | |
| " mydict = {}\n", | |
| " for i in range(n):\n", | |
| " mydict[i%10] = i\n", | |
| " return None\n", | |
| "\n", | |
| "# The no GIL version will release the GIL and should be fast with threads\n", | |
| "@nb.jit(nogil=True)\n", | |
| "def numba_loop_nogil(n):\n", | |
| " \"\"\"Runs simple native Python loop which is memory light and involves no data input or output.\"\"\"\n", | |
| " mydict = {}\n", | |
| " for i in range(n):\n", | |
| " mydict[i%10] = i\n", | |
| " return None" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Run these functions once so they are compiled\n", | |
| "numba_loop_gil(1000)\n", | |
| "numba_loop_nogil(1000)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Here we'll choose some input values so these functions take O(0.1-1 second) to run" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "438 ms ± 1.8 ms per loop (mean ± std. dev. of 10 runs, 1 loop each)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%timeit -n 1 -r 10 numba_loop_gil(20_000_000)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "444 ms ± 12.8 ms per loop (mean ± std. dev. of 10 runs, 1 loop each)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%timeit -n 1 -r 10 numba_loop_nogil(20_000_000)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "517 ms ± 80.4 ms per loop (mean ± std. dev. of 10 runs, 1 loop each)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%timeit -n 1 -r 10 numpy_cpu_heavy_function(2_000)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "644 ms ± 9.51 ms per loop (mean ± std. dev. of 10 runs, 1 loop each)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%timeit -n 1 -r 10 basic_python_loop(10_000_000)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "351 ms ± 3.59 ms per loop (mean ± std. dev. of 10 runs, 1 loop each)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%timeit -n 1 -r 10 save_text_data(10_000_000)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "1.15 s ± 6.08 ms per loop (mean ± std. dev. of 10 runs, 1 loop each)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%timeit -n 1 -r 10 load_text_data()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "1.52 s ± 8.56 ms per loop (mean ± std. dev. of 10 runs, 1 loop each)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%timeit -n 1 -r 10 save_csv(100_000)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 14, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "138 ms ± 4.89 ms per loop (mean ± std. dev. of 10 runs, 1 loop each)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "%timeit -n 1 -r 10 load_csv()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "The following functions are convenience function to time how long the previous functions take to run using processes or threads." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 15, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def time_function(func):\n", | |
| " \"\"\"Function decorator which returns start and end times of function call.\"\"\"\n", | |
| " def f(args, **kwargs):\n", | |
| " t0 = time.time()\n", | |
| " result = func(args, **kwargs)\n", | |
| " t1 = time.time()\n", | |
| " return result, t0, t1\n", | |
| " return f\n", | |
| "\n", | |
| "def sort_by_start_times(arr):\n", | |
| " return np.array(sorted(arr,key=lambda x: x[0]))\n", | |
| "\n", | |
| "def process(func, args, n, scheduler, **func_kwargs):\n", | |
| " \"\"\"Wrapper function used to run a given function n times \n", | |
| " and time how long each evaluation of that function takes. \n", | |
| " Timed using the given scheduler.\"\"\"\n", | |
| " if scheduler is None:\n", | |
| " # No scheduler just means use a loop\n", | |
| " t0 = time.time()\n", | |
| " results = [time_function(func)(*args, **func_kwargs)[1:] for _ in range(n)]\n", | |
| " t1 = time.time()\n", | |
| " else:\n", | |
| " # Wrapping the function like this means we will only calcualte the time taken inside the function\n", | |
| " processing_times = [delayed(time_function(func))(*args, **func_kwargs) for _ in range(n)]\n", | |
| " t0 = time.time()\n", | |
| " results = dask.compute(processing_times, scheduler=scheduler)\n", | |
| " t1 = time.time()\n", | |
| " results = [r[1:] for r in results[0]]\n", | |
| " # Add full time for all calculations\n", | |
| " results = [(t0, t1)] + results\n", | |
| " # Compile all the timings\n", | |
| " time_array = np.array(results) - t0\n", | |
| " return sort_by_start_times(time_array)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 16, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def plot_results(time_array, ax=None, ylabel=None, title=None):\n", | |
| " \"\"\"Function used to plot timing results for multiple tasks. \n", | |
| " The time_array is that created by the process function.\n", | |
| " \"\"\"\n", | |
| " n = time_array.shape[0]\n", | |
| " \n", | |
| " if ax is None:\n", | |
| " fig, ax = plt.subplots()\n", | |
| " ax.set_xlim(0, time_array.max())\n", | |
| " \n", | |
| " ax.set_xlabel('seconds since start')\n", | |
| " ax.set_ylabel('task')\n", | |
| " \n", | |
| " ax.set_ylim(0, n)\n", | |
| " ax.set_yticks(np.arange(n)+.5)\n", | |
| " ax.set_yticklabels([*np.arange(1, n)]+['Total'])\n", | |
| " ax.grid(True)\n", | |
| " for i in range(n):\n", | |
| " facecolors = ('tab:blue') if i==(n-1) else ('tab:orange')\n", | |
| " ax.broken_barh([(time_array[i,0], time_array[i,1]-time_array[i,0])], (i, .9), facecolors=facecolors)\n", | |
| " if title:\n", | |
| " ax.set_title(title)\n", | |
| " if ylabel:\n", | |
| " ax.set_ylabel(ylabel)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 17, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def plot_all(sync_times, threads_times, processes_times, title=None, figsize=(8,8)):\n", | |
| " \"\"\"Wrapper function to plot multiple task schedule plots\"\"\"\n", | |
| " shape = (1, 3)\n", | |
| " fig, axes = plt.subplots(1,3, sharey=True, sharex=True, figsize=figsize)\n", | |
| " axes = axes.flatten()\n", | |
| " plot_results(sync_times, ax=axes[0], ylabel='task', title='Loop')\n", | |
| " plot_results(threads_times, ax=axes[1], ylabel='task', title='Threads')\n", | |
| " plot_results(processes_times, ax=axes[2], ylabel='task', title='Processes')\n", | |
| " fig.suptitle(title, y=1)\n", | |
| " plt.tight_layout()\n", | |
| " return fig, axes" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 18, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# We will run each function 16 times\n", | |
| "n=16" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Create the pools of threads and processes we will use. Note that starting up these pools can take a couple of seconds, but we disregard that time in our analysis." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table style=\"border: 2px solid white;\">\n", | |
| "<tr>\n", | |
| "<td style=\"vertical-align: top; border: 0px solid white\">\n", | |
| "<h3 style=\"text-align: left;\">Client</h3>\n", | |
| "<ul style=\"text-align: left; list-style: none; margin: 0; padding: 0;\">\n", | |
| " <li><b>Scheduler: </b>tcp://127.0.0.1:37743</li>\n", | |
| " <li><b>Dashboard: </b><a href='http://127.0.0.1:8786/status' target='_blank'>http://127.0.0.1:8786/status</a></li>\n", | |
| "</ul>\n", | |
| "</td>\n", | |
| "<td style=\"vertical-align: top; border: 0px solid white\">\n", | |
| "<h3 style=\"text-align: left;\">Cluster</h3>\n", | |
| "<ul style=\"text-align: left; list-style:none; margin: 0; padding: 0;\">\n", | |
| " <li><b>Workers: </b>3</li>\n", | |
| " <li><b>Cores: </b>3</li>\n", | |
| " <li><b>Memory: </b>118.18 GB</li>\n", | |
| "</ul>\n", | |
| "</td>\n", | |
| "</tr>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "<Client: 'tcp://127.0.0.1:37743' processes=3 threads=3, memory=118.18 GB>" | |
| ] | |
| }, | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "process_client = Client(processes=True, n_workers=3, threads_per_worker=1, dashboard_address=':8786')\n", | |
| "process_client" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 20, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<table style=\"border: 2px solid white;\">\n", | |
| "<tr>\n", | |
| "<td style=\"vertical-align: top; border: 0px solid white\">\n", | |
| "<h3 style=\"text-align: left;\">Client</h3>\n", | |
| "<ul style=\"text-align: left; list-style: none; margin: 0; padding: 0;\">\n", | |
| " <li><b>Scheduler: </b>inproc://10.0.0.4/32641/1</li>\n", | |
| " <li><b>Dashboard: </b><a href='http://10.0.0.4:8785/status' target='_blank'>http://10.0.0.4:8785/status</a></li>\n", | |
| "</ul>\n", | |
| "</td>\n", | |
| "<td style=\"vertical-align: top; border: 0px solid white\">\n", | |
| "<h3 style=\"text-align: left;\">Cluster</h3>\n", | |
| "<ul style=\"text-align: left; list-style:none; margin: 0; padding: 0;\">\n", | |
| " <li><b>Workers: </b>1</li>\n", | |
| " <li><b>Cores: </b>3</li>\n", | |
| " <li><b>Memory: </b>118.18 GB</li>\n", | |
| "</ul>\n", | |
| "</td>\n", | |
| "</tr>\n", | |
| "</table>" | |
| ], | |
| "text/plain": [ | |
| "<Client: 'inproc://10.0.0.4/32641/1' processes=1 threads=3, memory=118.18 GB>" | |
| ] | |
| }, | |
| "execution_count": 20, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "thread_client = Client(processes=False, n_workers=1, threads_per_worker=3, dashboard_address=':8785')\n", | |
| "thread_client" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Start by analysing the basic Python loop" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 21, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "sync_python_loop_times = process(basic_python_loop, args=(10_000_000,), n=n, scheduler=None)\n", | |
| "threads_python_loop_times = process(basic_python_loop, args=(10_000_000,), n=n, scheduler=thread_client)\n", | |
| "processes_python_loop_times = process(basic_python_loop, args=(10_000_000,), n=n, scheduler=process_client)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAGVCAYAAADjWpKuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAA9hAAAPYQGoP6dpAABp7klEQVR4nO3deXwU9f3H8fcGNhsSkgAJIUTCIcoht0XlEAlCwIhRbD3TInhXUUQ88SJRK0pb6oFAsQqijUfl+AmiGAVERRAEKlZF5UZAhEoCiYQl+f7+wGxZk8Bu9p59PR+PPGBnvzPz+cx39rP73ZmdsRljjAAAAAAAgN/FhDoAAAAAAACsikE3AAAAAAABwqAbAAAAAIAAYdANAAAAAECAMOgGAAAAACBAGHQDAAAAABAgDLoBAAAAAAgQBt0AAAAAAAQIg24AAAAAAAKEQTcAIKzMnDlTNpvN7a9p06bKysrSggULArpum82m/Px8vyyrdevWbjk0bNhQZ511lmbNmlWn5T322GOaN29etelV22v16tU+Ruw/rVu31siRI0MdBgAAYYFBNwAgLM2YMUOffPKJli9frunTp6tevXrKzc3V/PnzA7bOTz75RNddd53flte3b1998skn+uSTT1yD4xEjRmjq1KleL6u2QTcAAAhv9UMdAAAANencubN69uzpenzeeeepcePGeuWVV5SbmxuQdfbq1cuvy2vUqJHbMgcNGqRWrVpp0qRJuummm/y6LgAAEJ440g0AiAhxcXGKjY2V3W53m15QUKCzzjpLTZo0UVJSkk4//XQ9//zzMsa4tVu8eLGysrKUkpKiBg0aqGXLlvrd736nsrIyV5uaTi///vvvdcMNNygzM1OxsbHKyMjQJZdcoh9++MHrHBo1aqT27dtr69atkqRrr71WTZo0cYuhyrnnnqtOnTq54iotLdWLL77oOl09KyvLrf2BAwd00003KTU1VSkpKfrtb3+rnTt3urWprKzUxIkT1aFDBzkcDqWlpemqq67Sjh073NplZWWpc+fOWrVqlfr166f4+HidfPLJevzxx1VZWel13pK0bds2/eEPf1BaWpocDoc6duyov/71r9WW99///lc333yzTjrpJMXGxurkk0/W/fffr/Lycrd2NptNt9xyi/7+97+rXbt2cjgcOu200/Tqq6/WKT4AAAKFI90AgLBUUVGhI0eOyBijH374QX/+859VWlqqvLw8t3ZbtmzRjTfeqJYtW0qSVqxYoVtvvVXff/+9HnroIVeboUOHql+/fnrhhRfUqFEjff/993rnnXd0+PBhxcfH1xjD999/rzPOOENOp1P33Xefunbtqn379mnRokX66aef1KxZM69ycjqd2rp1q5o2bSpJuu222/TCCy+osLDQ7bT2L7/8UkuWLNGzzz4r6ehp7+eee64GDBigBx98UJKUlJTktuzrrrtOQ4cOVWFhobZv36677rpLf/jDH7R48WJXm5tuuknTp0/XLbfcogsuuEBbtmzRgw8+qKVLl2rNmjVKTU11td29e7d+//vf64477tD48eM1d+5cjRs3ThkZGbrqqqu8yvvHH39Unz59dPjwYT3yyCNq3bq1FixYoDvvvFMbN27UlClTJEmHDh3SgAEDtHHjRhUUFKhr16768MMPNWHCBK1bt05vvfWW23LffPNNLVmyRA8//LASEhI0ZcoUXXnllapfv74uueQSr2IEACBgDAAAYWTGjBlGUrU/h8NhpkyZctx5KyoqjNPpNA8//LBJSUkxlZWVxhhj3njjDSPJrFu37rjzSzLjx493Pb7mmmuM3W43X375pdd5tGrVypx//vnG6XQap9NpNm/ebEaMGGEkmbvuusvVrn///qZ79+5u8950000mKSnJHDhwwDUtISHBjBgxotp6qrbXzTff7DZ94sSJRpLZtWuXMcaYr776qsZ2K1euNJLMfffd5xaTJLNy5Uq3tqeddpoZMmSIR7kfG+u9995b4/JuuukmY7PZzIYNG4wxxkybNs1IMq+//rpbuyeeeMJIMu+++65rmiTToEEDs3v3bte0I0eOmA4dOphTTjnlhDECABAsnF4OAAhLs2bN0qpVq7Rq1Sq9/fbbGjFihEaNGqXJkye7tVu8eLEGDRqk5ORk1atXT3a7XQ899JD27dunPXv2SJK6d++u2NhY3XDDDXrxxRe1adMmj2J4++23NWDAAHXs2LFOOSxcuFB2u112u11t2rTR66+/rltvvVWPPvqoq81tt92mdevW6eOPP5YklZSU6KWXXtKIESPUsGFDj9d14YUXuj3u2rWrJLlOZV+yZIkkVbuq+JlnnqmOHTvq/fffd5uenp6uM888s9oyq5bnjcWLF+u0006rtryRI0fKGOM6Gr948WIlJCRUO0pdFfOvYxw4cKDb2Qb16tXT5Zdfru+++67aKfMAAIQKg24AQFjq2LGjevbsqZ49e+q8887T3//+dw0ePFh333239u/fL0n69NNPNXjwYEnSc889p48//lirVq3S/fffL0n6+eefJUlt27bVe++9p7S0NI0aNUpt27ZV27Zt9dRTTx03hh9//FEtWrSocw5nn322Vq1apdWrV+vLL7/U/v379fTTTys2NtbV5qKLLlLr1q1dp5LPnDlTpaWlGjVqlFfrSklJcXvscDgk/W8b7Nu3T5LUvHnzavNmZGS4nq9teVXLrFqeN/bt21freo+Nbd++fUpPT5fNZnNrl5aWpvr161eLMT09vdoyq6b9ui0AAKHCoBsAEDG6du2qn3/+Wd98840k6dVXX5XdbteCBQt02WWXqU+fPm5XPD9Wv379NH/+fBUXF2vFihXq3bu3xowZc9wLbzVt2tSnI6bJycnq2bOnfvOb36hjx45ug+0qMTExGjVqlN544w3t2rVLU6ZM0cCBA9W+ffs6r7cmVYPoXbt2VXtu586dbr/n9reUlJRa1yvJte6UlBT98MMP1S6Ct2fPHh05cqRajLt37662zKppNX1pAABAKDDoBgBEjHXr1kmS60JkNptN9evXV7169Vxtfv75Z7300ku1LqNevXo666yzXEeW16xZU2vbnJwcLVmyRBs2bPBD9LW77rrrFBsbq9///vfasGGDbrnllmpt6nqUucq5554rSXr55Zfdpq9atUpfffWVBg4cWOdln8jAgQP15ZdfVtvWs2bNks1m04ABA1ztDh48WO1+5LNmzXI9f6z333/f7SryFRUVeu2119S2bVufzlAAAMCfuHo5ACAsffHFFzpy5Iiko6cKz5kzR0VFRbr44ovVpk0bSdLQoUM1adIk5eXl6YYbbtC+ffv0l7/8xXVqdZVp06Zp8eLFGjp0qFq2bKlDhw7phRdekHT03tm1efjhh/X222/rnHPO0X333acuXbpo//79eueddzR27Fh16NDBL7k2atRIV111laZOnapWrVrVeB/yLl26aOnSpZo/f76aN2+uxMREr46Gt2/fXjfccIOeeeYZxcTEKCcnx3X18szMTN1+++1+yaUmt99+u2bNmqWhQ4fq4YcfVqtWrfTWW29pypQpuummm9SuXTtJ0lVXXaVnn31WI0aM0JYtW9SlSxd99NFHeuyxx3T++edX66vU1FSde+65evDBB11XL//666+5bRgAIKww6AYAhKWrr77a9f/k5GS1adNGkyZN0s033+yafu655+qFF17QE088odzcXJ100km6/vrrlZaWpmuvvdbVrnv37nr33Xc1fvx47d69Ww0bNlTnzp315ptvun4TXpOTTjpJn376qcaPH6/HH39c+/btU9OmTXX22WerSZMmfs338ssv19SpU3XTTTcpJqb6iWhPPfWURo0apSuuuEJlZWXq37+/li5d6tU6pk6dqrZt2+r555/Xs88+q+TkZJ133nmaMGFCQE/Hbtq0qZYvX65x48Zp3LhxKikp0cknn6yJEydq7NixrnZxcXFasmSJ7r//fv35z3/Wjz/+qJNOOkl33nmnxo8fX225F154oTp16qQHHnhA27ZtU9u2bfXPf/5Tl19+ecByAQDAWzbz6x9OAQCAoLvjjjs0depUbd++nd8je8Bms9V4NXsAAMINR7oBAAihFStW6JtvvtGUKVN04403MuAGAMBiGHQDABBCvXv3Vnx8vC644AK3+3cDAABr4PRyAAAAAAAChFuGAQAAAAAQIAy6AQAAAAAIEAbdAAAAAAAECINuAAAAAAAChEE3AAAAAAABwqAbAAAAAIAAYdANAAAAAECAMOgGAAAAACBAGHQDAAAAABAgDLoBAAAAAAgQBt0AAAAAAAQIg24AAAAAAAKEQTcAAAAAAAHCoBsAAAAAgABh0A0AAAAAQIAw6AYAAAAAIEAYdAMAAAAAECAMugEAAAAACBAG3QAAAAAABAiDbgAAAAAAAoRBNwAAAAAAAcKgGwAAAACAAGHQDQAAAABAgDDoBgAAAAAgQBh0AwAAAAAQIAy6AQAAAAAIEAbdAAAAAAAECINuAAAAAAAChEE3AAAAAAABwqAbkDRz5kzZbDatXr061KEAQK1sNptHf0uXLtXSpUtls9n0xhtvhDpsj2RlZSkrKyvUYQAIkqrPXlV/9evXV4sWLXT11Vfr+++/D3V4gF/VD3UAAADAM5988onb40ceeURLlizR4sWL3aafdtppWrNmTTBDA4A6mTFjhjp06KCff/5Zy5Yt04QJE/TBBx9o/fr1SkhICHV4gF8w6AYAIEL06tXL7XHTpk0VExNTbbo/lJWVKT4+3u/LBYBjde7cWT179pQkDRgwQBUVFXrkkUc0b948/f73v6/WntqESMTp5YCHPvroIw0cOFCJiYmKj49Xnz599NZbb1Vr98UXX+iiiy5S48aNFRcXp+7du+vFF190a1N12ufLL7+ssWPHKj09XQ0aNFD//v21du3aYKUEIAo4nU7df//9ysjIUFJSkgYNGqQNGza4tcnKylLnzp21bNky9enTR/Hx8brmmmskSSUlJbrzzjvVpk0bxcbG6qSTTtKYMWNUWlrqtoxnn31W55xzjtLS0pSQkKAuXbpo4sSJcjqdbu2MMZo4caJatWqluLg4nX766Xr77berxV1ZWalHH31U7du3V4MGDdSoUSN17dpVTz31lJ+3EIBwUvUl4tatWzVy5Eg1bNhQ69ev1+DBg5WYmKiBAwdKkv773//q5ptv1kknnaTY2FidfPLJuv/++1VeXu62vMrKSj3zzDPq3r27q5b06tVLb775plu71157Tb1791ZCQoIaNmyoIUOGVPtMtmnTJl1xxRXKyMiQw+FQs2bNNHDgQK1bt87VZvHixcrKylJKSooaNGigli1b6ne/+53KyspcbQ4fPqxHH31UHTp0kMPhUNOmTXX11Vfrxx9/dFufJ8tCZOBIN+CBDz74QNnZ2eratauef/55ORwOTZkyRbm5uXrllVd0+eWXS5I2bNigPn36KC0tTU8//bRSUlL08ssva+TIkfrhhx909913uy33vvvu0+mnn65//OMfKi4uVn5+vrKysrR27VqdfPLJoUgVgMXcd9996tu3r/7xj3+opKRE99xzj3Jzc/XVV1+pXr16rna7du3SH/7wB91999167LHHFBMTo7KyMvXv3187duzQfffdp65du+o///mPHnroIa1fv17vvfeebDabJGnjxo3Ky8tzDc7//e9/609/+pO+/vprvfDCC671FBQUqKCgQNdee60uueQSbd++Xddff70qKirUvn17V7uJEycqPz9fDzzwgM455xw5nU59/fXX2r9/f9C2HYDg++677yQdPZPnm2++0eHDh3XhhRfqxhtv1L333qsjR47o0KFDGjBggDZu3KiCggJ17dpVH374oSZMmKB169a5HRQZOXKkXn75ZV177bV6+OGHFRsbqzVr1mjLli2uNo899pgeeOABXX311XrggQd0+PBh/fnPf1a/fv306aef6rTTTpMknX/++aqoqNDEiRPVsmVL7d27V8uXL3fVpS1btmjo0KHq16+fXnjhBTVq1Ejff/+93nnnHR0+fFjx8fGqrKzURRddpA8//FB33323+vTpo61bt2r8+PHKysrS6tWr1aBBA4+WhQhiAJgZM2YYSWbVqlU1Pt+rVy+TlpZmDhw44Jp25MgR07lzZ9OiRQtTWVlpjDHmiiuuMA6Hw2zbts1t/pycHBMfH2/2799vjDFmyZIlRpI5/fTTXfMaY8yWLVuM3W431113nb9TBGBBI0aMMAkJCTU+V1Vnzj//fLfpr7/+upFkPvnkE9e0/v37G0nm/fffd2s7YcIEExMTU602vvHGG0aSWbhwYY3rrqioME6n08yaNcvUq1fP/Pe//zXGGPPTTz+ZuLg4c/HFF7u1//jjj40k079/f9e0Cy64wHTv3v34GwBAxKr67LVixQrjdDrNgQMHzIIFC0zTpk1NYmKi2b17txkxYoSRZF544QW3eadNm2Ykmddff91t+hNPPGEkmXfffdcYY8yyZcuMJHP//ffXGse2bdtM/fr1za233uo2/cCBAyY9Pd1cdtllxhhj9u7daySZJ598stZlVdXGdevW1drmlVdeMZLM7Nmz3aavWrXKSDJTpkzxeFmIHJxeDpxAaWmpVq5cqUsuuUQNGzZ0Ta9Xr56GDx+uHTt2uE7VXLx4sQYOHKjMzEy3ZYwcOVJlZWXVLoKUl5fnOkokSa1atVKfPn20ZMmSAGYEIJpceOGFbo+7du0q6eipm8dq3Lixzj33XLdpCxYsUOfOndW9e3cdOXLE9TdkyBDXVdKrrF27VhdeeKFSUlJUr1492e12XXXVVaqoqNA333wj6eiF4A4dOlTtd5p9+vRRq1at3KadeeaZ+ve//62bb75ZixYtUklJiU/bAUB46tWrl+x2uxITE3XBBRcoPT1db7/9tpo1a+Zq87vf/c5tnsWLFyshIUGXXHKJ2/SRI0dKkt5//31Jcv10ZdSoUbWuf9GiRTpy5IiuuuoqtzoXFxen/v37u+pckyZN1LZtW/35z3/WpEmTtHbtWlVWVrotq3v37oqNjdUNN9ygF198UZs2baq2vgULFqhRo0bKzc11W1/37t2Vnp7uWp8ny0LkYNANnMBPP/0kY4yaN29e7bmMjAxJ0r59+1z/etKuSnp6erW26enp1doBQF2lpKS4PXY4HJKkn3/+2W16TbXrhx9+0Oeffy673e72l5iYKGOM9u7dK0natm2b+vXrp++//15PPfWUPvzwQ61atUrPPvus27qqalttte9Y48aN01/+8hetWLFCOTk5SklJ0cCBA7m1I2Axs2bN0qpVq7R27Vrt3LlTn3/+ufr27et6Pj4+XklJSW7z7Nu3T+np6W4HLiQpLS1N9evXd9WaH3/8UfXq1aux5lT54YcfJElnnHFGtVr32muvueqczWbT+++/ryFDhmjixIk6/fTT1bRpU40ePVoHDhyQJLVt21bvvfee0tLSNGrUKLVt21Zt27Z1uxbFDz/8oP379ys2Nrba+nbv3u1anyfLQuTgN93ACTRu3FgxMTHatWtXted27twpSUpNTZV09MOtJ+2q7N69u1rb3bt3V/uQDACB9usPr9LRmtWgQQO332T/+nlJmjdvnkpLSzVnzhy3I9bHXlxI+t8XALXVvtatW7se169fX2PHjtXYsWO1f/9+vffee7rvvvs0ZMgQbd++nd8zAhbRsWNH19XLa1JTbUpJSdHKlStljHF7fs+ePTpy5IirNjVt2lQVFRXavXt3jV8sSv+rY2+88Ua1M25+rVWrVnr++eclSd98841ef/115efn6/Dhw5o2bZokqV+/furXr58qKiq0evVqPfPMMxozZoyaNWumK664QqmpqUpJSdE777xT4zoSExNd/z/RshA5ONINnEBCQoLOOusszZkzx+3IUGVlpV5++WW1aNFC7dq1kyQNHDhQixcvdg2yq8yaNUvx8fHVbuvzyiuvyBjjerx161YtX75cWVlZgUsIADx0wQUXaOPGjUpJSVHPnj2r/VUNkqs+9FYdRZeOXqX8ueeec1ter169FBcXp3/+859u05cvX17tdPdjNWrUSJdccolGjRql//73v24XQAIQfQYOHKiDBw9q3rx5btNnzZrlel6ScnJyJElTp06tdVlDhgxR/fr1tXHjxhrrXG1fCLRr104PPPCAunTpojVr1lR7vl69ejrrrLNcZ/xUtbngggu0b98+VVRU1LiuYy8oeaJlIXJwpBs4xuLFi2v8MDdhwgRlZ2drwIABuvPOOxUbG6spU6boiy++0CuvvOL6wDl+/HgtWLBAAwYM0EMPPaQmTZron//8p9566y1NnDhRycnJbsvds2ePLr74Yl1//fUqLi7W+PHjFRcXp3HjxgUjXQA4rjFjxmj27Nk655xzdPvtt6tr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+dXiTU9PP+48kdaXktS6desa+2bUqFE1to+Uvly2bJlyc3OVkZEhm82mefPmuT1vjFF+fr4yMjLUoEEDZWVl6T//+c8Jlzt79myddtppcjgcOu200zR37twAZRDeqHPVRcpr41jUOepcTahzR1HnqouU18axqHORXeek6Kh1DLq99Nprr2nMmDG6//77tXbtWvXr1085OTnatm1bje03b96s888/X/369dPatWt13333afTo0Zo9e3aQI/fcBx98oFGjRmnFihUqKirSkSNHNHjwYJWWlp5w3g0bNmjXrl2uv1NPPTUIEdddp06d3OJdv359rW0jsS8ladWqVW45FhUVSZIuvfTS484X7n1ZWlqqbt26afLkyTU+P3HiRE2aNEmTJ0/WqlWrlJ6eruzsbB04cKDWZX7yySe6/PLLNXz4cP373//W8OHDddlll2nlypWBSiMsUeeOL9xfG79GnatduPcldS5wqHPHF+6vjV+jztUuEvoyKmqdgVfOPPNM88c//tFtWocOHcy9995bY/u7777bdOjQwW3ajTfeaHr16hWwGP1tz549RpL54IMPam2zZMkSI8n89NNPwQvMR+PHjzfdunXzuL0V+tIYY2677TbTtm1bU1lZWePzkdiXkszcuXNdjysrK016erp5/PHHXdMOHTpkkpOTzbRp02pdzmWXXWbOO+88t2lDhgwxV1xxhd9jDmfUuZpF4muDOked+zXq3FHUuZpF4muDOmedOmeMdWsdR7q9cPjwYX322WcaPHiw2/TBgwdr+fLlNc7zySefVGs/ZMgQrV69Wk6nM2Cx+lNxcbEkqUmTJids26NHDzVv3lwDBw7UkiVLAh2az7799ltlZGSoTZs2uuKKK7Rp06Za21qhLw8fPqyXX35Z11xzjWw223HbRlpfHmvz5s3avXu3W385HA7179+/1teqVHsfH28eq6HOUecivS+pc9S5E6HOUecivS+jpc5J1ql1DLq9sHfvXlVUVKhZs2Zu05s1a6bdu3fXOM/u3btrbH/kyBHt3bs3YLH6izFGY8eO1dlnn63OnTvX2q558+aaPn26Zs+erTlz5qh9+/YaOHCgli1bFsRovXPWWWdp1qxZWrRokZ577jnt3r1bffr00b59+2psH+l9KUnz5s3T/v37NXLkyFrbRGJf/lrV69Gb12rVfN7OYzXUOepcJPelRJ2jzp0YdY46F8l9KUVPnZOsU+vqh2StEe7X3ygZY477LVNN7WuaHo5uueUWff755/roo4+O2659+/Zq376963Hv3r21fft2/eUvf9E555wT6DDrJCcnx/X/Ll26qHfv3mrbtq1efPFFjR07tsZ5IrkvJen5559XTk6OMjIyam0TiX1ZG29fq3Wdx4qoc9VF4muDOlezSOzL2lDn6o46V10kvjaoczWLxL48nkivdRzp9kJqaqrq1atX7RuSPXv2VPsmpUp6enqN7evXr6+UlJSAxeoPt956q958800tWbJELVq08Hr+Xr166dtvvw1AZIGRkJCgLl261BpzJPelJG3dulXvvfeerrvuOq/njbS+rLpqqTev1ar5vJ3Haqhz3om01wZ1rnaR1pfUubqjznkn0l4b1LnaRVpfStapdQy6vRAbG6vf/OY3rqsFVikqKlKfPn1qnKd3797V2r/77rvq2bOn7HZ7wGL1hTFGt9xyi+bMmaPFixerTZs2dVrO2rVr1bx5cz9HFzjl5eX66quvao05EvvyWDNmzFBaWpqGDh3q9byR1pdt2rRRenq6W38dPnxYH3zwQa2vVan2Pj7ePFZDnfNOpL02qHO1i7S+pM7VHXXOO5H22qDO1S7S+lKyUK0L6mXbLODVV181drvdPP/88+bLL780Y8aMMQkJCWbLli3GGGPuvfdeM3z4cFf7TZs2mfj4eHP77bebL7/80jz//PPGbrebN954I1QpnNBNN91kkpOTzdKlS82uXbtcf2VlZa42v87zb3/7m5k7d6755ptvzBdffGHuvfdeI8nMnj07FCl45I477jBLly41mzZtMitWrDAXXHCBSUxMtFRfVqmoqDAtW7Y099xzT7XnIrUvDxw4YNauXWvWrl1rJJlJkyaZtWvXmq1btxpjjHn88cdNcnKymTNnjlm/fr258sorTfPmzU1JSYlrGcOHD3e7Uu3HH39s6tWrZx5//HHz1Vdfmccff9zUr1/frFixIuj5hRJ17qhIfW0cizp3VKT2JXUucKhzR0Xqa+NY1LmjIrkvo6HWMeiug2effda0atXKxMbGmtNPP93t1gsjRoww/fv3d2u/dOlS06NHDxMbG2tat25tpk6dGuSIvSOpxr8ZM2a42vw6zyeeeMK0bdvWxMXFmcaNG5uzzz7bvPXWW8EP3guXX365ad68ubHb7SYjI8P89re/Nf/5z39cz1uhL6ssWrTISDIbNmyo9lyk9mXVrTB+/TdixAhjzNFbTIwfP96kp6cbh8NhzjnnHLN+/Xq3ZfTv39/Vvsq//vUv0759e2O3202HDh3C8s0pGKhzkfvaOBZ17qhI7UvqXGBR5yL3tXEs6txRkdyX0VDrbMb8cuUAAAAAAADgV/ymGwAAAACAAGHQDQAAAABAgDDoBgAAAAAgQBh0AwAAAAAQIAy6AQAAAAAIEAbdAAAAAAAECINuAAAAAAAChEE3AAAAAAABwqAbUWvp0qWy2Wzav3+/35edlZWlMWPG+H25AOAN6hwAq6POIRLUD3UAgBXNmTNHdrs91GHUKj8/X/PmzdO6dev8sryRI0dq//79mjdvnl+WByD8UecAWB11Dv7CoBsIgCZNmoQ6hKCoqKiQzWYLdRgAQoA6B8DqqHPwF04vh1+88cYb6tKlixo0aKCUlBQNGjRIpaWlrudnzJihjh07Ki4uTh06dNCUKVPc5t+xY4euuOIKNWnSRAkJCerZs6dWrlzpen7q1Klq27atYmNj1b59e7300ktu89tsNv3jH//QxRdfrPj4eJ166ql688033dosXLhQ7dq1U4MGDTRgwABt2bLF7fmtW7cqNzdXjRs3VkJCgjp16qSFCxfWmvOUKVN06qmnKi4uTs2aNdMll1zieu7XpyO1bt1ajz32mK655holJiaqZcuWmj59ulfbYP78+frNb36juLg4nXzyySooKNCRI0dqjW/p0qU688wzlZCQoEaNGqlv377aunWrZs6cqYKCAv373/+WzWaTzWbTzJkzJUmTJk1Sly5dlJCQoMzMTN188806ePCga5kzZ85Uo0aNtGDBAp122mlyOBy6+uqr9eKLL+r//u//XMtbunRprXEBkYo6R52jzsHqqHPUOepcgBjARzt37jT169c3kyZNMps3bzaff/65efbZZ82BAweMMcZMnz7dNG/e3MyePdts2rTJzJ492zRp0sTMnDnTGGPMgQMHzMknn2z69etnPvzwQ/Ptt9+a1157zSxfvtwYY8ycOXOM3W43zz77rNmwYYP561//aurVq2cWL17sikGSadGihSksLDTffvutGT16tGnYsKHZt2+fMcaYbdu2GYfDYW677Tbz9ddfm5dfftk0a9bMSDI//fSTMcaYoUOHmuzsbPP555+bjRs3mvnz55sPPvigxpxXrVpl6tWrZwoLC82WLVvMmjVrzFNPPeV6vn///ua2225zPW7VqpVp0qSJefbZZ823335rJkyYYGJiYsxXX33l0TZ45513TFJSkpk5c6bZuHGjeffdd03r1q1Nfn5+jfE5nU6TnJxs7rzzTvPdd9+ZL7/80sycOdNs3brVlJWVmTvuuMN06tTJ7Nq1y+zatcuUlZUZY4z529/+ZhYvXmw2bdpk3n//fdO+fXtz0003uZY7Y8YMY7fbTZ8+fczHH39svv76a7N//35z2WWXmfPOO8+1vPLycs92HiBCUOeoc9Q5WB11jjpHnQscBt3w2WeffWYkmS1bttT4fGZmpiksLHSb9sgjj5jevXsbY4z5+9//bhITE10F9df69Oljrr/+erdpl156qTn//PNdjyWZBx54wPX44MGDxmazmbffftsYY8y4ceNMx44dTWVlpavNPffc41aku3TpUmvR+7XZs2ebpKQkU1JSUuPzNRXpP/zhD67HlZWVJi0tzUydOtUYc+Jt0K9fP/PYY4+5TXvppZdM8+bNa2y/b98+I8ksXbq0xufHjx9vunXrVlt6Lq+//rpJSUlxPZ4xY4aRZNatW+fWbsSIEeaiiy464fKASEWdq446B1gLda466hz8hdPL4bNu3bpp4MCB6tKliy699FI999xz+umnnyRJP/74o7Zv365rr71WDRs2dP09+uij2rhxoyRp3bp16tGjR62/m/nqq6/Ut29ft2l9+/bVV1995Tata9eurv8nJCQoMTFRe/bscS2jV69ebr9X6d27t9v8o0eP1qOPPqq+fftq/Pjx+vzzz2vNOTs7W61atdLJJ5+s4cOH65///KfKysqOu52Ojc9msyk9Pd0V34m2wWeffaaHH37YbRtef/312rVrV43rbdKkiUaOHKkhQ4YoNzdXTz31lHbt2nXc+CRpyZIlys7O1kknnaTExERdddVV2rdvn9upZbGxsW65ANGAOkedA6yOOkedQ+Aw6IbP6tWrp6KiIr399ts67bTT9Mwzz6h9+/bavHmzKisrJUnPPfec1q1b5/r74osvtGLFCklSgwYNTriOX1/cwRhTbdqvry5ps9lc6zfGnHAd1113nTZt2qThw4dr/fr16tmzp5555pka2yYmJmrNmjV65ZVX1Lx5cz300EPq1q3bcW9Xcbz4TrQNKisrVVBQ4LYN169fr2+//VZxcXE1zjNjxgx98skn6tOnj1577TW1a9fOtc1rsnXrVp1//vnq3LmzZs+erc8++0zPPvusJMnpdLraNWjQgIttIOpQ56hzgNVR56hzCBwG3fALm82mvn37qqCgQGvXrlVsbKzmzp2rZs2a6aSTTtKmTZt0yimnuP21adNG0tFvDNetW6f//ve/NS67Y8eO+uijj9ymLV++XB07dvQ4vtNOO61agaqpYGVmZuqPf/yj5syZozvuuEPPPfdcrcusX7++Bg0apIkTJ+rzzz/Xli1btHjxYo9jOtaJtsHpp5+uDRs2VNuGp5xyimJian8Z9+jRQ+PGjdPy5cvVuXNnFRYWSjr67WZFRYVb29WrV+vIkSP661//ql69eqldu3bauXOnR/HXtDzAaqhz1DnqHKyOOkedo84FBrcMg89Wrlyp999/X4MHD1ZaWppWrlypH3/80VVE8/PzNXr0aCUlJSknJ0fl5eVavXq1fvrpJ40dO1ZXXnmlHnvsMQ0bNkwTJkxQ8+bNtXbtWmVkZKh379666667dNlll+n000/XwIEDNX/+fM2ZM0fvvfeexzH+8Y9/1F//+leNHTtWN954oz777DPXFR6rjBkzRjk5OWrXrp1++uknLV68uNY3ggULFmjTpk0655xz1LhxYy1cuFCVlZVq3759nbbhibbBQw89pAsuuECZmZm69NJLFRMTo88//1zr16/Xo48+Wm15mzdv1vTp03XhhRcqIyNDGzZs0DfffKOrrrpK0tGrb27evFnr1q1TixYtlJiYqLZt2+rIkSN65plnlJubq48//ljTpk3zKP7WrVtr0aJF2rBhg1JSUpScnBzW97UEvEWdo85R52B11DnqHHUugEL5g3JYw5dffmmGDBlimjZtahwOh2nXrp155pln3Nr885//NN27dzexsbGmcePG5pxzzjFz5sxxPb9lyxbzu9/9ziQlJZn4+HjTs2dPs3LlStfzU6ZMMSeffLKx2+2mXbt2ZtasWW7Ll2Tmzp3rNi05OdnMmDHD9Xj+/PnmlFNOMQ6Hw/Tr18+88MILbhfeuOWWW0zbtm2Nw+EwTZs2NcOHDzd79+6tMecPP/zQ9O/f3zRu3Ng0aNDAdO3a1bz22muu52u68Mbf/vY3t2V069bNjB8/3uNt8M4775g+ffqYBg0amKSkJHPmmWea6dOn1xjf7t27zbBhw0zz5s1NbGysadWqlXnooYdMRUWFMcaYQ4cOmd/97nemUaNGRpJrO02aNMk0b97cNGjQwAwZMsTMmjXLbRvNmDHDJCcnV1vfnj17THZ2tmnYsKGRZJYsWVJjXECkos5R56hzsDrqHHWOOhc4NmM8+HEEAAAAAADwGr/pBgAAAAAgQBh0AwAAAAAQIAy6AQAAAAAIEAbdAAAAAAAECINuAAAAAAAChEE3AAAAAAABwqAbAAAAAIAAYdANAAAAAECAMOgGAAAAACBAGHQDAAAAABAgDLoBAAAAAAgQBt0AAAAAAATI/wPQ2oyRwImmzgAAAABJRU5ErkJggg==\n", | |
| "text/plain": [ | |
| "<Figure size 1000x400 with 3 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, axes = plot_all(sync_python_loop_times, threads_python_loop_times, processes_python_loop_times, title='Basic Python loop', figsize=(10,4))\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Next is the same function, but after being compiled by Numba, it is much faster, but still locks the GIL." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 23, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "sync_numba_times = process(numba_loop_gil, args=(10_000_000,), n=n, scheduler=None)\n", | |
| "threads_numba_times = process(numba_loop_gil, args=(10_000_000,), n=n, scheduler=thread_client)\n", | |
| "processes_numba_times = process(numba_loop_gil, args=(10_000_000,), n=n, scheduler=process_client)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 24, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAGVCAYAAADjWpKuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAA9hAAAPYQGoP6dpAABhP0lEQVR4nO3deXRU9f3/8dcEJpMEkkgStkhYBEFkp6gsRYIQMGIUrFhNi4DL1ypWkbqhVhJFqVgVFcXiAlqNS2WpIIJRNi2KICBoFWUXATEoCSQShuTz+4MyP2MyYZLJneXO83EOR+fOvXfe9507r7mfuXdmHMYYIwAAAAAAUOeigl0AAAAAAAB2xaAbAAAAAACLMOgGAAAAAMAiDLoBAAAAALAIg24AAAAAACzCoBsAAAAAAIsw6AYAAAAAwCIMugEAAAAAsAiDbgAAAAAALMKgGwAQMWbPni2Hw6GYmBjt3Lmz0v3p6enq3LlzECqTli9fLofDoTfffNPyx3I4HMrJybH8cQAAAINuAEAEKi0t1T333BPsMgAAQARg0A0AiDjnn3++8vLy9NlnnwW7FAAAYHMMugEAEef2229XcnKy7rjjjmrn27FjhxwOh2bPnl3pvl9fop2TkyOHw6GNGzdq5MiRSkxMVFJSkiZMmKBjx45p8+bNOv/88xUfH6/WrVtr6tSpVT7mkSNHNGHCBDVr1kyxsbEaMGCA1q9fX2GetWvX6vLLL1fr1q0VGxur1q1b64orrqjyknlfff7557r44ovVqFEjxcTEqHv37nrxxRcrzbdr1y798Y9/VJMmTeRyudSxY0c98sgjKi8v98xzom9Tp07VAw88oJYtWyomJka9evXS+++/X+saAQAIRwy6AQARJz4+Xvfcc4+WLFmipUuX1um6L7vsMnXr1k1z5szRtddeq8cee0y33HKLhg8frmHDhmnevHk677zzdMcdd2ju3LmVlr/rrru0bds2Pffcc3ruuee0Z88epaena9u2bZ55duzYoQ4dOmjatGlasmSJHnroIe3du1dnnXWWCgoKalzz5s2b1bdvX33xxRd64oknNHfuXJ155pkaM2ZMhTcHfvjhB/Xt21fvvvuu7r//fr311lsaPHiwbr31Vt14442V1jt9+nQtXrxY06ZN08svv6yoqChlZmbqo48+qnGNAACELQMAQISYNWuWkWTWrFljSktLzWmnnWZ69eplysvLjTHGDBgwwHTq1Mkz//bt240kM2vWrErrkmQmTZrkuT1p0iQjyTzyyCMV5uvevbuRZObOneuZ5na7TePGjc0ll1zimbZs2TIjyfTs2dNTjzHG7NixwzidTnPNNdd43a5jx46Zw4cPmwYNGpjHH3/8pH34de2XX365cblcZteuXRXmy8zMNHFxcebgwYPGGGPuvPNOI8msXr26wnzXX3+9cTgcZvPmzcaY/9+31NRU8/PPP3vmKyoqMklJSWbw4MEnrREAALvgTDcAICJFR0dr8uTJWrt2rd544406W++FF15Y4XbHjh3lcDiUmZnpmVa/fn21a9euysvBs7Oz5XA4PLdbtWqlvn37atmyZZ5phw8f1h133KF27dqpfv36ql+/vho2bKji4mJ9+eWXNa556dKlGjRokNLS0ipMHzNmjEpKSjxnppcuXaozzzxTZ599dqX5jDGVrhq45JJLFBMT47kdHx+vrKwsrVy5UmVlZTWuEwCAcMSgGwAQsS6//HL17NlTd999t9xud52sMykpqcLt6OhoxcXFVRh8nph+5MiRSss3a9asymkHDhzw3M7Oztb06dN1zTXXaMmSJfrkk0+0Zs0aNW7cWD///HONaz5w4ICaN29eaXpqaqrn/prMd7JtOXr0qA4fPlzjOgEACEf1g10AAADB4nA49NBDDykjI0MzZ86sdP+JgXJpaWmF6b8eXNalffv2VTktOTlZklRYWKiFCxdq0qRJuvPOOz3zlJaW6scff6zVYyYnJ2vv3r2Vpu/Zs0eSlJKSUqP5TrYt0dHRatiwYa1qBQAg3HCmGwAQ0QYPHqyMjAzdd999lc6+Nm3aVDExMdq4cWOF6f/+978tq+fVV1+VMcZze+fOnVq1apXS09MlHX+jwBgjl8tVYbnnnnuu1pdsDxo0SEuXLvUMnk946aWXFBcXp969e3vm++9//6t169ZVms/hcGjgwIEVps+dO7fC2fxDhw5pwYIF6t+/v+rVq1erWgEACDec6QYARLyHHnpIv/nNb7R//3516tTJM93hcOiPf/yjXnjhBbVt21bdunXTJ598ory8PMtq2b9/v0aMGKFrr71WhYWFmjRpkmJiYjRx4kRJUkJCgs4991w9/PDDSklJUevWrbVixQo9//zzOuWUU2r1mJMmTdLChQs1cOBA3XvvvUpKStIrr7yit99+W1OnTlViYqIk6ZZbbtFLL72kYcOG6b777lOrVq309ttv6+mnn9b111+v9u3bV1hvvXr1lJGRoQkTJqi8vFwPPfSQioqKlJub61ePAAAIJwy6AQARr0ePHrriiiuqHEw/8sgjkqSpU6fq8OHDOu+887Rw4UK1bt3akloefPBBrVmzRmPHjlVRUZHOPvtsvfbaa2rbtq1nnry8PN188826/fbbdezYMfXr10/5+fkaNmxYrR6zQ4cOWrVqle666y6NGzdOP//8szp27KhZs2ZpzJgxnvkaN26sVatWaeLEiZo4caKKiop02mmnaerUqZowYUKl9d544406cuSIbrrpJs8bGm+//bb69etXqzoBAAhHDvPLa9gAAAD8tGPHDrVp00YPP/ywbr311mCXAwBAUPGZbgAAAAAALMKgGwAAAAAAi3B5OQAAAAAAFuFMNwAAAAAAFmHQDQAAAACARRh0AwAAAABgEQbdAAAAAABYhEE3AAAAAAAWYdANAAAAAIBFGHQDAAAAAGARBt0AAAAAAFiEQTcAAAAAABZh0A0AAAAAgEUYdAMAAAAAYBEG3QAAAAAAWIRBNwAAAAAAFmHQDQAAAACARRh0AwAAAABgEQbdAAAAAABYhEE3AAAAAAAWYdANAAAAAIBFGHQDAAAAAGARBt0AAAAAAFiEQTcAAAAAABZh0A0AAAAAgEUYdAMAAAAAYBEG3QAAAAAAWIRBNwAAAAAAFmHQDQAAAACARRh0AwAAAABgEQbdAAAAAABYhEE3AAAAAAAWYdANSJo9e7YcDofWrl0b7FIAwCuHw+HTv+XLl2v58uVyOBx68803g122T9LT05Wenh7sMgAEyIljrxP/6tevrxYtWmjs2LH67rvvgl0eUKfqB7sAAADgm48++qjC7fvvv1/Lli3T0qVLK0w/88wztW7dukCWBgC1MmvWLJ1xxhn6+eeftXLlSk2ZMkUrVqzQpk2b1KBBg2CXB9QJBt0AAISJ3r17V7jduHFjRUVFVZpeF0pKShQXF1fn6wWAX+rcubN69eolSRo4cKDKysp0//33a/78+frDH/5QaX6yCeGIy8sBH3344YcaNGiQ4uPjFRcXp759++rtt9+uNN/nn3+uiy++WI0aNVJMTIy6d++uF198scI8Jy77fPnllzVhwgQ1a9ZMsbGxGjBggNavXx+oTQIQAdxut+6++26lpqYqISFBgwcP1ubNmyvMk56ers6dO2vlypXq27ev4uLidNVVV0mSioqKdOutt6pNmzaKjo7WqaeeqvHjx6u4uLjCOp566imde+65atKkiRo0aKAuXbpo6tSpcrvdFeYzxmjq1Klq1aqVYmJi1LNnT73zzjuV6i4vL9fkyZPVoUMHxcbG6pRTTlHXrl31+OOP13GHAISSE28i7ty5U2PGjFHDhg21adMmDRkyRPHx8Ro0aJAk6ccff9QNN9ygU089VdHR0TrttNN09913q7S0tML6ysvL9eSTT6p79+6eLOndu7feeuutCvO9/vrr6tOnjxo0aKCGDRtq6NChlY7Jtm3bpssvv1ypqalyuVxq2rSpBg0apA0bNnjmWbp0qdLT05WcnKzY2Fi1bNlSv/vd71RSUuKZ5+jRo5o8ebLOOOMMuVwuNW7cWGPHjtUPP/xQ4fF8WRfCA2e6AR+sWLFCGRkZ6tq1q55//nm5XC49/fTTysrK0quvvqrf//73kqTNmzerb9++atKkiZ544gklJyfr5Zdf1pgxY/T999/r9ttvr7Deu+66Sz179tRzzz2nwsJC5eTkKD09XevXr9dpp50WjE0FYDN33XWX+vXrp+eee05FRUW64447lJWVpS+//FL16tXzzLd371798Y9/1O23364HH3xQUVFRKikp0YABA7R7927ddddd6tq1q7744gvde++92rRpk9577z05HA5J0tatW5Wdne0ZnH/22Wd64IEH9NVXX+mFF17wPE5ubq5yc3N19dVX69JLL9W3336ra6+9VmVlZerQoYNnvqlTpyonJ0f33HOPzj33XLndbn311Vc6ePBgwHoHIPC2bNki6fiVPF9//bWOHj2qiy66SNddd53uvPNOHTt2TEeOHNHAgQO1detW5ebmqmvXrvrggw80ZcoUbdiwocJJkTFjxujll1/W1Vdfrfvuu0/R0dFat26dduzY4ZnnwQcf1D333KOxY8fqnnvu0dGjR/Xwww+rf//++uSTT3TmmWdKki644AKVlZVp6tSpatmypQoKCrRq1SpPLu3YsUPDhg1T//799cILL+iUU07Rd999p8WLF+vo0aOKi4tTeXm5Lr74Yn3wwQe6/fbb1bdvX+3cuVOTJk1Senq61q5dq9jYWJ/WhTBiAJhZs2YZSWbNmjVV3t+7d2/T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rKwsz+/3Nm7cWDt37tS0adPUqlUrnX766YFsA4AQc+WVV+qpp57S6NGjtWPHDnXp0kUffvihHnzwQV1wwQUaPHiwpONnikeNGqXJkyfr+++/14UXXiiXy6X169crLi5Of/7zn9W6dWvdd999uvvuu7Vt2zadf/75atSokb7//nt98sknatCggXJzc7Vx40bdeOONGjlypE4//XRFR0dr6dKl2rhxo+68805J0jPPPKOlS5dq2LBhatmypY4cOeK5UuhETZdffrleeeUVXXDBBbr55pt19tlny+l0avfu3Vq2bJkuvvhijRgxwqd1IYwE9WvcgBBx4hs0vf3bvn27+eCDD8x5551nGjRoYGJjY03v3r3NggULKq1r06ZNJisryyQmJpro6GjTrVs3M2vWrArznPhW4X/+85/mpptuMo0bNzYul8v079/frF27NkBbDSDc+fLt5f/6178qTN++fbuRVCGXBgwYYDp16lTleg4fPmzuuece06FDBxMdHW0SExNNly5dzC233GL27dvnmW/BggWmW7duJiYmxpx66qnmtttuM++8846RZJYtW+aZr7y83EyZMsWkpaWZ6Oho07VrV7NgwQIzYMCACt9e/sgjj5i+ffualJQUEx0dbVq2bGmuvvpqs2PHjpo3CkDIOdkvxxhTfcYdOHDA/OlPfzLNmzc39evXN61atTITJ040R44cqTBfWVmZeeyxx0znzp09GdanT59Kx3Dz5883AwcONAkJCcblcplWrVqZSy+91Lz33nvGGGO+//57M2bMGHPGGWeYBg0amIYNG5quXbuaxx57zBw7dswYY8xHH31kRowYYVq1amVcLpdJTk42AwYMMG+99VaFx3K73ebvf/+7JzMbNmxozjjjDHPdddeZb775pkbrQnhwGPOLa1sBBMTy5cs1cOBA/etf/6r0zZsAAAAA7IPPdAMAAAAAYBEG3QAAAAAAWITLywEAAAAAsAhnugEAAAAAsAiDbgAAAAAALMKgGwAAAAAAi9QPdgGhrLy8XHv27FF8fLwcDkewywFgI8YYHTp0SKmpqYqKCt77n+QcAKuQcwDsztecY9BdjT179igtLS3YZQCwsW+//VYtWrQI2uOTcwCsRs4BsLuT5RyD7mrEx8dLOt7EhIQEn5Zxu9169913NWTIEDmdTivLCzv0xjt6451de1NUVKS0tDRP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GzwH7PRcrmt26o2v22HrQffhw4e1ZcsWz+3t27drw4YNSkpKUsuWLYNYGQAAAAAgEth60L127VoNHDjQc3vChAmSpNGjR2v27NlBqgoAAAAAEClsPehOT09XhHxkHQAAAAAQgvidbgAAAAAALGLrM93+OnGW/MTvO/rC7XarpKRERUfK5azNWfYaPFa48fSmqMg2X55QV+iNd3btzYlcCfbVOEHJuVBgUdbadX+tC/Smenbsjy1yLtB/j9LQz1S3o9z614AwPh6243O5rtixN77mXMT8ZFht7N69W2lpacEuA4CNffvtt2rRIng/EUPOAbAaOQfA7k6Wcwy6q1FeXq49e/YoPj5eDofDp2VO/Bbkt99+G9DfpAwH9MY7euOdXXtjjNGhQ4eUmpqqqKjgfdKHnKtb9MY7elM9O/aHnLMnelM9+uOdHXvja85xeXk1oqKiav3ObEJCgm12prpGb7yjN97ZsTeJiYnBLoGcswi98Y7eVM9u/SHn7IveVI/+eGe33viSc3yRGgAAAAAAFmHQDQAAAACARRh01zGXy6VJkybJ5XIFu5SQQ2+8ozfe0ZvQw9/EO3rjHb2pHv0JLfw9vKM31aM/3kVyb/giNQAAAAAALMKZbgAAAAAALMKgGwAAAAAAizDoBgAAAADAIgy669DTTz+tNm3aKCYmRr/5zW/0wQcfBLukkLBy5UplZWUpNTVVDodD8+fPD3ZJIWPKlCk666yzFB8fryZNmmj48OHavHlzsMsKCTNmzFDXrl09v+XYp08fvfPOO8EuK+KRc1Uj57wj57wj50IXWVcZOecdOecdOXccg+468vrrr2v8+PG6++67tX79evXv31+ZmZnatWtXsEsLuuLiYnXr1k3Tp08PdikhZ8WKFRo3bpw+/vhj5efn69ixYxoyZIiKi4uDXVrQtWjRQn/729+0du1arV27Vuedd54uvvhiffHFF8EuLWKRc96Rc96Rc96Rc6GJrKsaOecdOecdOXcc315eR8455xz17NlTM2bM8Ezr2LGjhg8frilTpgSxstDicDg0b948DR8+PNilhKQffvhBTZo00YoVK3TuuecGu5yQk5SUpIcfflhXX311sEuJSOScb8i56pFz1SPngo+sOzlyrnrkXPUiMec4010Hjh49qk8//VRDhgypMH3IkCFatWpVkKpCOCosLJR0PIzw/5WVlem1115TcXGx+vTpE+xyIhI5h7pCzlWNnAsNZB3qAjlXtUjOufrBLsAOCgoKVFZWpqZNm1aY3rRpU+3bty9IVSHcGGM0YcIE/fa3v1Xnzp2DXU5I2LRpk/r06aMjR46oYcOGmjdvns4888xglxWRyDnUBXKuMnIutJB18Bc5Vxk5x6C7Tjkcjgq3jTGVpgHe3Hjjjdq4caM+/PDDYJcSMjp06KANGzbo4MGDmjNnjkaPHq0VK1ZEXFCHEnIO/iDnKiPnQhNZh9oi5yoj5xh014mUlBTVq1ev0jug+/fvr/ROKVCVP//5z3rrrbe0cuVKtWjRItjlhIzo6Gi1a9dOktSrVy+tWbNGjz/+uP7xj38EubLIQ87BX+Rc1ci50ELWwR/kXNXIOT7TXSeio6P1m9/8Rvn5+RWm5+fnq2/fvkGqCuHAGKMbb7xRc+fO1dKlS9WmTZtglxTSjDEqLS0NdhkRiZxDbZFzNUPOBRdZh9og52omEnOOM911ZMKECRo1apR69eqlPn36aObMmdq1a5f+9Kc/Bbu0oDt8+LC2bNniub19+3Zt2LBBSUlJatmyZRArC75x48YpLy9P//73vxUfH+95Zz0xMVGxsbFBri647rrrLmVmZiotLU2HDh3Sa6+9puXLl2vx4sXBLi1ikXPekXPekXPekXOhiayrGjnnHTnnHTn3PwZ15qmnnjKtWrUy0dHRpmfPnmbFihXBLikkLFu2zEiq9G/06NHBLi3oquqLJDNr1qxglxZ0V111lef51LhxYzNo0CDz7rvvBrusiEfOVY2c846c846cC11kXWXknHfknHfk3HH8TjcAAAAAABbhM90AAAAAAFiEQTcAAAAAABZh0A0AAAAAgEUYdAMAAAAAYBEG3QAAAAAAWIRBNwAAAAAAFmHQDQAAAACARRh0AwAAAABgEQbdiFjLly+Xw+HQwYMH63zd6enpGj9+fJ2vFwBqgpwDYHfkHMJB/WAXANjR3Llz5XQ6g12GVzk5OZo/f742bNhQJ+sbM2aMDh48qPnz59fJ+gCEPnIOgN2Rc6grDLoBCyQlJQW7hIAoKyuTw+EIdhkAgoCcA2B35BzqCpeXo068+eab6tKli2JjY5WcnKzBgweruLjYc/+sWbPUsWNHxcTE6IwzztDTTz9dYfndu3fr8ssvV1JSkho0aKBevXpp9erVnvtnzJihtm3bKjo6Wh06dNA///nPCss7HA4999xzGjFihOLi4nT66afrrbfeqjDPokWL1L59e8XGxmrgwIHasWNHhft37typrKwsNWrUSA0aNFCnTp20aNEir9v89NNP6/TTT1dMTIyaNm2qSy+91HPfry9Hat26tR588EFdddVVio+PV8uWLTVz5swa9WDBggX6zW9+o5iYGJ122mnKzc3VsWPHvNa3fPlynX322WrQoIFOOeUU9evXTzt37tTs2bOVm5urzz77TA6HQw6HQ7Nnz5YkPfroo+rSpYsaNGigtLQ03XDDDTp8+LBnnbNnz9Ypp5yihQsX6swzz5TL5dLYsWP14osv6t///rdnfcuXL/daFxCuyDlyjpyD3ZFz5Bw5ZxED+GnPnj2mfv365tFHHzXbt283GzduNE899ZQ5dOiQMcaYmTNnmubNm5s5c+aYbdu2mTlz5pikpCQze/ZsY4wxhw4dMqeddprp37+/+eCDD8w333xjXn/9dbNq1SpjjDFz5841TqfTPPXUU2bz5s3mkUceMfXq1TNLly711CDJtGjRwuTl5ZlvvvnG3HTTTaZhw4bmwIEDxhhjdu3aZVwul7n55pvNV199ZV5++WXTtGlTI8n89NNPxhhjhg0bZjIyMszGjRvN1q1bzYIFC8yKFSuq3OY1a9aYevXqmby8PLNjxw6zbt068/jjj3vuHzBggLn55ps9t1u1amWSkpLMU089Zb755hszZcoUExUVZb788kuferB48WKTkJBgZs+ebbZu3Wreffdd07p1a5OTk1NlfW632yQmJppbb73VbNmyxfz3v/81s2fPNjt37jQlJSXmL3/5i+nUqZPZu3ev2bt3rykpKTHGGPPYY4+ZpUuXmm3btpn333/fdOjQwVx//fWe9c6aNcs4nU7Tt29f85///Md89dVX5uDBg+ayyy4z559/vmd9paWlvu08QJgg58g5cg52R86Rc+ScdRh0w2+ffvqpkWR27NhR5f1paWkmLy+vwrT777/f9OnTxxhjzD/+8Q8THx/vCdRf69u3r7n22msrTBs5cqS54IILPLclmXvuucdz+/Dhw8bhcJh33nnHGGPMxIkTTceOHU15eblnnjvuuKNCSHfp0sVr6P3anDlzTEJCgikqKqry/qpC+o9//KPndnl5uWnSpImZMWOGMebkPejfv7958MEHK0z75z//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\n", | |
| "text/plain": [ | |
| "<Figure size 1000x400 with 3 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, axes = plot_all(sync_numba_times, threads_numba_times, processes_numba_times,\n", | |
| " title='Numba loop', figsize=(10,4))\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "The results above are interesting. The first call to the function in the processses was much slower. I think this is because the function had to be copied across to the processes and recompiled on first use.\n", | |
| "\n", | |
| "Next is the same function, but we told Numba not to lock the GIL, so threads should be faster than above." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 25, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "sync_numba_nogil_times = process(numba_loop_nogil, args=(10_000_000,), n=n, scheduler=None)\n", | |
| "threads_numba_nogil_times = process(numba_loop_nogil, args=(10_000_000,), n=n, scheduler=thread_client)\n", | |
| "processes_numba_nogil_times = process(numba_loop_nogil, args=(10_000_000,), n=n, scheduler=process_client)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 26, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAGVCAYAAADjWpKuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAA9hAAAPYQGoP6dpAABhaUlEQVR4nO3deXwU9f3H8fcGNpsEkgjhjIRDEERuispRJAgBI0bBitW0CHjUKhYx9UKtJIpSsSpWFIsHaDUelaOCCka5tCiCgKBVlFsExKAkkEhYku/vD35sXXPs5thjZl/PxyMPndnvzHz2w3c+O9+d2RmHMcYIAAAAAADUuahQBwAAAAAAgF0x6AYAAAAAIEAYdAMAAAAAECAMugEAAAAACBAG3QAAAAAABAiDbgAAAAAAAoRBNwAAAAAAAcKgGwAAAACAAGHQDQAAAABAgDDoBgBEjLlz58rhcCgmJka7du0q93pqaqq6du0agsikFStWyOFw6PXXXw/4thwOh7KzswO+HQAAwKAbABCBSkpKdPfdd4c6DAAAEAEYdAMAIs7555+v3Nxcffrpp6EOBQAA2ByDbgBAxLntttuUlJSk22+/vcp2O3fulMPh0Ny5c8u99stLtLOzs+VwOLRp0yaNHj1aiYmJaty4sbKysnT8+HFt2bJF559/vuLj49W2bVtNnz69wm0ePXpUWVlZatGihWJjYzVo0CBt2LDBq826det0+eWXq23btoqNjVXbtm11xRVXVHjJvL8+++wzXXzxxWrUqJFiYmLUs2dPPf/88+Xa7d69W7///e/VrFkzuVwude7cWQ8//LDKyso8bU7mbfr06br//vvVunVrxcTEqE+fPnrvvfdqHCMAAFbEoBsAEHHi4+N19913a+nSpVq2bFmdrvuyyy5Tjx49NG/ePF177bV69NFHdfPNN2vkyJEaMWKEFixYoPPOO0+333675s+fX275O++8U9u3b9czzzyjZ555Rnv37lVqaqq2b9/uabNz50516tRJM2bM0NKlS/Xggw9q3759Ouuss5Sfn1/tmLds2aL+/fvr888/19///nfNnz9fZ555psaNG+f15cD333+v/v3765133tF9992nN954Q0OHDtUtt9yiG2+8sdx6Z86cqSVLlmjGjBl68cUXFRUVpfT0dH344YfVjhEAAMsyAABEiDlz5hhJZu3ataak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cLvduuuuu5ScnKyEhAQNHTpUW7Zs8WqTmpqqrl27atWqVerfv7/i4uJ01VVXSZIKCwt1yy23qF27doqOjtapp56qSZMmqaioyGsdTzzxhM4991w1a9ZMDRo0ULdu3TR9+nS53W6vdsYYTZ8+XW3atFFMTIx69+6tt99+u1zcZWVlmjp1qjp16qTY2Fidcsop6t69ux577LE6zhCAcHLyS8Rdu3Zp3LhxatiwoTZv3qxhw4YpPj5eQ4YMkST98MMPuuGGG3TqqacqOjpap512mu666y6VlJR4ra+srEyPP/64evbs6aklffv21RtvvOHV7tVXX1W/fv3UoEEDNWzYUMOHDy93TLZ9+3ZdfvnlSk5OlsvlUvPmzTVkyBBt3LjR02bZsmVKTU1VUlKSYmNj1bp1a/3mN79RcXGxp82xY8c0depUnXHGGXK5XGratKnGjx+v77//3mt7/qwL1sCZbsAPK1euVFpamrp3765nn31WLpdLTz75pDIyMvTyyy/rt7/9rSRpy5Yt6t+/v5o1a6a///3vSkpK0osvvqhx48bpu+++02233ea13jvvvFO9e/fWM888o4KCAmVnZys1NVUbNmzQaaedFoq3CsBm7rzzTg0YMEDPPPOMCgsLdfvttysjI0NffPGF6tWr52m3b98+/f73v9dtt92mBx54QFFRUSouLtagQYO0Z88e3Xnnnerevbs+//xz3XPPPdq8ebPeffddORwOSdK2bduUmZnpGZx/+umnuv/++/Xll1/queee82wnJydHOTk5uvrqq3XppZfqm2++0bXXXqvS0lJ16tTJ02769OnKzs7W3XffrXPPPVdut1tffvmlDh06FLTcAQi+rVu3SjpxJc9XX32lY8eO6aKLLtJ1112nO+64Q8ePH9fRo0c1ePBgbdu2TTk5Oerevbvef/99TZs2TRs3bvQ6KTJu3Di9+OKLuvrqq3XvvfcqOjpa69ev186dOz1tHnjgAd19990aP3687r77bh07dkwPPfSQBg4cqI8//lhnnnmmJOmCCy5QaWmppk+frtatWys/P1+rV6/21KWdO3dqxIgRGjhwoJ577jmdcsop+vbbb7VkyRIdO3ZMcXFxKisr08UXX6z3339ft912m/r3769du3ZpypQpSk1N1bp16xQbG+vXumAhBoCZM2eOkWTWrl1b4et9+/Y1zZo1M4cPH/bMO378uOnatatp1aqVKSsrM8YYc/nllxuXy2V2797ttXx6erqJi4szhw4dMsYYs3z5ciPJ9O7d27OsMcbs3LnTOJ1Oc80119T1WwRgQ2PHjjUNGjSo8LWTdeaCCy7wmv/aa68ZSebDDz/0zBs0aJCRZN577z2vttOmTTNRUVHlauPrr79uJJm33nqrwm2XlpYat9ttXnjhBVOvXj3zww8/GGOM+fHHH01MTIwZNWqUV/v//Oc/RpIZNGiQZ96FF15oevbsWXUCAFjWyWOvjz76yLjdbnP48GGzePFi07RpUxMfH2/2799vxo4daySZ5557zmvZp556ykgyr732mtf8Bx980Egy77zzjjHGmFWrVhlJ5q677qo0jt27d5v69eubP/3pT17zDx8+bFq0aGEuu+wyY4wx+fn5RpKZMWNGpes6WRs3btxYaZuXX37ZSDLz5s3zmr927VojyTz55JN+rwvWweXlgA9FRUVas2aNLr30UjVs2NAzv169ehozZoz27NnjuVRz2bJlGjJkiFJSUrzWMW7cOBUXF5e7CVJmZqbnLJEktWnTRv3799fy5csD+I4ARJKLLrrIa7p79+6STly6+XONGjXSeeed5zVv8eLF6tq1q3r27Knjx497/oYPH+65S/pJGzZs0EUXXaSkpCTVq1dPTqdTV155pUpLS/XVV19JOnEjuKNHj5b7nWb//v3Vpk0br3lnn322Pv30U91www1aunSpCgsLa5UHAOGpb9++cjqdio+P14UXXqgWLVro7bffVvPmzT1tfvOb33gts2zZMjVo0ECXXnqp1/xx48ZJkt577z1J8vx0ZcKECZVuf+nSpTp+/LiuvPJKrzoXExOjQYMGeepc48aN1b59ez300EN65JFHtGHDBpWVlXmtq2fPnoqOjtYf/vAHPf/889q+fXu57S1evFinnHKKMjIyvLbXs2dPtWjRwrM9f9YF62DQDfjw448/yhijli1blnstOTlZknTw4EHPf/1pd1KLFi3KtW3RokW5dgBQU0lJSV7TLpdLkvTTTz95za+odn333XfatGmTnE6n1198fLyMMcrPz5ck7d69WwMHDtS3336rxx57TO+//77Wrl2rJ554wmtbJ2tbZbXv5yZPnqy//e1v+uijj5Senq6kpCQNGTKERzsCNvPCCy9o7dq12rBhg/bu3atNmzZpwIABntfj4uKUkJDgtczBgwfVokULrxMXktSsWTPVr1/fU2u+//571atXr8Kac9J3330nSTrrrLPK1bpXX33VU+ccDofee+89DR8+XNOnT1fv3r3VtGlTTZw4UYcPH5YktW/fXu+++66aNWumCRMmqH379mrfvr3XvSi+++47HTp0SNHR0eW2t3//fs/2/FkXrIPfdAM+NGrUSFFRUdq3b1+51/bu3StJatKkiaQTB7f+tDtp//795dru37+/3EEyAATaLw9epRM1KzY21us32b98XZIWLlyooqIizZ8/3+uM9c9vLiT97wuAympf27ZtPdP169dXVlaWsrKydOjQIb377ru68847NXz4cH3zzTf8nhGwic6dO3vuXl6RimpTUlKS1qxZI2OM1+sHDhzQ8ePHPbWpadOmKi0t1f79+yv8YlH6Xx17/fXXy11x80tt2rTRs88+K0n66quv9Nprryk7O1vHjh3TU089JUkaOHCgBg4cqNLSUq1bt06PP/64Jk2apObNm+vyyy9XkyZNlJSUpCVLllS4jfj4eM//+1oXrIMz3YAPDRo00DnnnKP58+d7nRkqKyvTiy++qFatWqljx46SpCFDhmjZsmWeQfZJL7zwguLi4so91ufll1+WMcYzvWvXLq1evVqpqamBe0MA4KcLL7xQ27ZtU1JSkvr06VPu7+Qg+eRB78mz6NKJu5Q//fTTXuvr27evYmJi9NJLL3nNX716dbnL3X/ulFNO0aWXXqoJEybohx9+8LoBEoDIM2TIEB05ckQLFy70mv/CCy94Xpek9PR0SdKsWbMqXdfw4cNVv359bdu2rcI6V9kXAh07dtTdd9+tbt26af369eVer1evns455xzPFT8n21x44YU6ePCgSktLK9zWz28o6WtdsA7OdAM/s2zZsgoP5qZNm6a0tDQNHjxYt9xyi6Kjo/Xkk0/qs88+08svv+w54JwyZYoWL16swYMH65577lHjxo310ksv6c0339T06dOVmJjotd4DBw5o1KhRuvbaa1VQUKApU6YoJiZGkydPDsbbBYAqTZo0SfPmzdO5556rm2++Wd27d1dZWZl2796td955R3/+8591zjnnKC0tTdHR0briiit022236ejRo5o1a5Z+/PFHr/U1atRIt9xyi6ZOnaprrrlGo0eP1jfffKPs7Oxyl39mZGR4nt/btGlT7dq1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GqVu3bqpRYsW2rlzZzBCBgAAAACgnLA8033rrbfqsssuU+/evTVkyBAtWrRI8+fP97oTedu2bfXee+9pwIABcrlcatSokTp06KD58+crIyNDDodDf/nLX1RWVhbCdwIAAAAAiGRheaZ75MiReuyxx/TQQw+pS5cu+sc//qE5c+YoNTXV0+bhhx9WXl6eUlJS1KtXL0nSo48+qkaNGql///7KyMjQ8OHD1bt37xC9CwAAAABApAuLM93jxo3TuHHjvOZdf/31uv766ytdJiMjQxkZGV7z2rZtq2XLlnnNmzBhgtc0l5sDAAAAAIIlLM90AwAAAABgBwy6AQAAAAAIkLC4vNyOPssebsnb3geD2+3WW2+9RY4qQX58I0fhgfxXjj4K2AP7cOWoc4D/GHQDgCRlJ9Zy+YK6iQORgz4HAOVRG2FDXF4OAAAAAECAWHbQvWrVKmVkZCg5OVkOh0MLFy4s1+aLL77QRRddpMTERMXHx6tv377avXt38IMFAAAAAEQkyw66i4qK1KNHD82cObPC17dt26Zf//rXOuOMM7RixQp9+umn+stf/qKYmJggRwoAAAAAiFSW/U13enq60tPTK339rrvu0gUXXKDp06d75p122mnBCA0AAAAAAEkWPtNdlbKyMr355pvq2LGjhg8frmbNmumcc86p8BJ0AAAAAAACxbJnuqty4MABHTlyRH/96181depUPfjgg1qyZIkuueQSLV++XIMGDapwuZKSEpWUlHimCwsLJZ14JILb7fZr2yfb+ds+EpGjqpEf3wKSo6ha/vSkmrGE6t+XOhccfuUoyH0u3NCPfLN6jqhz9hawHNmoNtKPfLN6jvyN22GMMQGOJeAcDocWLFigkSNHSpL27t2rU089VVdccYVyc3M97S666CI1aNBAL7/8coXryc7OVk5OTrn5ubm5iouLC0jsACJTcXGxMjMzVVBQoISEhKBtlzoHIFiocwDszt86Z8tB97Fjx9SgQQNNmTJFd999t6fd7bffrg8++ED/+c9/KlxPRd+MpqSkKD8/3+8PC7fbrby8PKWlpcnpdNb8TdkYOaoa+fEtIDma1qp2y0/eU63mhYWFatKkSdAPRqlzweFXjoLc58IN/cg3q+eIOmdvAcuRjWoj/cg3q+fI3zpny8vLo6OjddZZZ2nLli1e87/66iu1adOm0uVcLpdcLle5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4XBo4cKFXq8bY5Sdna3k5GTFxsYqNTVVn3/+eWiCBQAAAABEJMsOuouKitSjRw/NnDmzwtenT5+uRx55RDNnztTatWvVokULpaWl6fDhw0GOFAAAAAAQqSz7m+709HSlp6dX+JoxRjNmzNBdd92lSy65RJL0/PPPq3nz5srNzdV1110XzFABAAAAABHKsoPuquzYsUP79+/XsGHDPPNcLpcGDRqk1atXVzroLikpUUlJiWe6sLBQkuR2u+V2u/3a9sl2/raPROSoClExckfFSJLnv9USITm1Qx8KVezUuZ+pyT72c1W8f9vkKIDIkW9WzxF1zoKqURcrPF6JtHz5ELH9qBqsniN/43YYY0yAYwk4h8OhBQsWaOTIkZKk1atXa8CAAfr222+VnJzsafeHP/xBu3bt0tKlSytcT3Z2tnJycsrNz83NVVxcXEBiBxCZiouLlZmZqYKCAiUkJARtu9Q5AMFCnQNgd/7WOVsPuvfu3auWLVt62l177bX65ptvtGTJkgrXU9E3oykpKcrPz/f7w8LtdisvL09paWlyOp01f1M2Ro6qMK2V3FExyuv2d6VtnihndR8ZNnlPYOIKM3boQ4WFhWrSpEnQD0apcz8zrVXtlq9if7NNjgKIHPlm9RxR5yyoGnWxwuOVCDkO8VfE9qNqsHqO/K1ztry8vEWLFpKk/fv3ew26Dxw4oObNm1e6nMvlksvlKjff6XRWuxPUZJlIQ44q8LNBtrPsaPUH3RGWTyv3oVDFTZ37meruX7/kx3u3fI6CgBz5ZtUcUecsqAZ10et4JZJyVQ0R149qwKo58jfmOr17+U8//VSXq6uxdu3aqUWLFsrLy/PMO3bsmFauXKn+/fuHMDIACJ5wqckAECjUOQBWUO1B94QJEyqcX1RUVOndxAPhyJEj2rhxozZu3CjpxM3TNm7cqN27d8vhcGjSpEl64IEHtGDBAn322WcaN26c4uLilJmZGbQYASDQwqUmA0CgUOcAWF21B93vvPOO7r77bq95RUVFOv/881VaWlpngfmybt069erVS7169ZIkZWVlqVevXrrnnnskSbfddpsmTZqkG264QX369NG3336rd955R/Hx8UGLEQACLVxqMgAECnUOgNVV+zfd77zzjn79618rKSlJN998sw4fPqzhw4erfv36evvttwMRY4VSU1NV1T3gHA6HsrOz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iYnRGWecoSeffNJr+T179ujyyy9X48aN1aBBA/Xp00dr1qzxvD5r1iy1b99e0dHR6tSpk/75z396Le9wOPTMM89o1KhRiouL0+mnn6433njDq81bb72ljh07KjY2VoMHD9bOnTu9Xt+1a5cyMjLUqFEjNWjQQF26dNFbb71V6Xt+8skndfrppysmJkbNmzfXpZde6nntl5cjtW3bVg888ICuuuoqxcfHq3Xr1po9e3a1crBo0SL96le/UkxMjE477TTl5OTo+PHjlca3YsUKnX322WrQoIFOOeUUDRgwQLt27dLcuXOVk5OjTz/9VA6HQw6HQ3PnzpUkPfLII+rWrZsaNGiglJQU3XDDDTpy5IhnnXPnztUpp5yixYsX68wzz5TL5dL48eP1/PPP69///rdnfStWrKg0LsCqqHPUOeoc7I46R52jzgWIAWpp7969pn79+uaRRx4xO3bsMJs2bTJPPPGEOXz4sDHGmNmzZ5uWLVuaefPmme3bt5t58+aZxo0bm7lz5xpjjDl8+LA57bTTzMCBA837779vvv76a/Pqq6+a1atXG2OMmT9/vnE6neaJJ54wW7ZsMQ8//LCpV6+eWbZsmScGSaZVq1YmNzfXfP3112bixImmYcOG5uDBg8YYY3bv3m1cLpe56aabzJdffmlefPFF07x5cyPJ/Pjjj8YYY0aMGGHS0tLMpk2bzLZt28yiRYvMypUrK3zPa9euNfXq1TO5ublm586dZv369eaxxx7zvD5o0CBz0003eabbtGljGjdubJ544gnz9ddfm2nTppmoqCjzxRdf+JWDJUuWmISEBDN37lyzbds2884775i2bdua7OzsCuNzu90mMTHR3HLLLWbr1q3mv//9r5k7d67ZtWuXKS4uNn/+859Nly5dzL59+8y+fftMcXGxMcaYRx991Cxbtsxs377dvPfee6ZTp07m+uuv96x3zpw5xul0mv79+5v//Oc/5ssvvzSHDh0yl112mTn//PM96yspKfGv8wAWQZ2jzlHnYHfUOeocdS5wGHSj1j755BMjyezcubPC11NSUkxubq7XvPvuu8/069fPGGPMP/7xDxMfH+8pqL/Uv39/c+2113rNGz16tLngggs805LM3Xff7Zk+cuSIcTgc5u233zbGGDN58mTTuXNnU1ZW5mlz++23exXpbt26VVr0fmnevHkmISHBFBYWVvh6RUX697//vWe6rKzMNGvWzMyaNcsY4zsHAwcONA888IDXvH/+85+mZcuWFbY/ePCgkWRWrFhR4etTpkwxPXr0qOztebz22msmKSnJMz1nzhwjyWzcuNGr3dixY83FF1/sc32AVVHnyqPOAfZCnSuPOoe6wuXlqLUePXpoyJAh6tatm0aPHq2nn35aP/74oyTp+++/1zfffKOrr75aDRs29PxNnTpV27ZtkyRt3LhRvXr1qvR3M1988YUGDBjgNW/AgAH64osvvOZ1797d8/8NGjRQfHy8Dhw44FlH3759vX6v0q9fP6/lJ06cqKlTp2rAgAGaMmWKNm3aVOl7TktLU5s2bXTaaadpzJgxeumll1RcXFxlnn4en8PhUIsWLTzx+crBJ598onvvvdcrh9dee6327dtX4XYbN26scePGafjw4crIyNBjjz2mffv2VRmfJC1fvlxpaWk69dRTFR8fryuvvFIHDx70urQsOjra670AkYA6R50D7I46R51D4DDoRq3Vq1dPeXl5evvtt3XmmWfq8ccfV6dOnbRjxw6VlZVJkp5++mlt3LjR8/fZZ5/po48+kiTFxsb63MYvb+5gjCk375d3l3Q4HJ7tG2N8buOaa67R9u3bNWbMGG3evFl9+vTR448/XmHb+Ph4rV+/Xi+//LJatmype+65Rz169KjycRVVxecrB2VlZcrJyfHK4ebNm/X1118rJiamwmXmzJmjDz/8UP3799err76qjh07enJekV27dumCCy5Q165dNW/ePH3yySd64oknJElut9vTLjY2lpttIOJQ56hzgN1R56hzCBwG3agTDodDAwYMUE5OjjZs2KDo6GgtWLBAzZs316mnnqrt27erQ4cOXn/t2rWTdOIbw40bN+qHH36ocN2dO3fWBx984DVv9erV6ty5s9/xnXnmmeUKVEUFKyUlRX/84x81f/58/fnPf9bTTz9d6Trr16+voUOHavr06dq0aZN27typZcuW+R3Tz/nKQe/evbVly5ZyOezQoYOioirfjXv16qXJkydr9erV6tq1q3JzcyWd+HaztLTUq+26det0/PhxPfzww+rbt686duyovXv3+hV/ResD7IY6R52jzsHuqHPUOepcYPDIMNTamjVr9N5772nYsGFq1qyZ1qxZo++//95TRLOzszVx4kQlJCQoPT1dJSUlWrdunX788UdlZWXpiiuu0AMPPKCRI0dq2rRpatmypTZs2KDk5GT169dPt956qy677DL17t1bQ4YM0aJFizR//ny9++67fsf4xz/+UQ8//LCysrJ03XXX6ZNPPvHc4fGkSZMmKT09XR07dtSPP/6oZcuWVfpBsHjxYm3fvl3nnnuuGjVqpLfeektlZWXq1KlTjXLoKwf33HOPLrzwQqWkpGj06NGKiorSpk2btHnzZk2dOrXc+nbs2KHZs2froosuUnJysrZs2aKvvvpKV155paQTd9/csWOHNm7cqFatWik+Pl7t27fX8ePH9fjjjysjI0P/+c9/9NRTT/kVf9u2bbV06VJt2bJFSUlJSkxMDOvnWgLVRZ2jzlHnYHfUOeocdS6AQvmDctjDf//7XzN8+HDTtGlT43K5TMeOHc3jjz/u1eall14yPXv2NNHR0aZRo0bm3HPPNfPnz/e8vnPnTvOb3/zGJCQkmLi4ONOnTx+zZs0az+tPPvmkOe2004zT6TQdO3Y0L7zwgtf6JZkFCxZ4zUtMTDRz5szxTC9atMh06NDBuFwuM3DgQPPcc8953XjjxhtvNO3btzcul8s0bdrUjBkzxuTn51f4nt9//30zaNAg06hRIxMbG2u6d+9uXn31Vc/rFd1449FHH/VaR48ePcyUKVP8zsGSJUtM//79TWxsrElISDBnn322mT17doXx7d+/34wcOdK0bNnSREdHmzZt2ph77rnHlJaWGmOMOXr0qPnNb35jTjnlFCPJk6dHHnnEtGzZ0sTGxprhw4ebF154wStHc+bMMYmJieW2d+DAAZOWlmYaNmxoJJnly5dXGBdgVdQ56hx1DnZHnaPOUecCx2GMHz+OAAAAAAAA1cZvugEAAAAACBAG3QAAAAAABAiDbgAAAAAAAoRBNwAAAAAAAcKgGwAAAACAAGHQDQAAAABAgDDoBgAAAAAgQBh0AwAAAAAQIAy6AQAAAAAIEAbdAAAAAAAECINuAAAAAAAChEE3AAAAAAAB8n+4Vd0FoNogUwAAAABJRU5ErkJggg==\n", | |
| "text/plain": [ | |
| "<Figure size 1000x400 with 3 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, axes = plot_all(sync_numba_nogil_times, threads_numba_nogil_times, processes_numba_nogil_times,\n", | |
| " title='Numba loop', figsize=(10,4))\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 27, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "sync_cpu_times = process(numpy_cpu_heavy_function, args=(2_000,), n=n, scheduler=None)\n", | |
| "threads_cpu_times = process(numpy_cpu_heavy_function, args=(2_000,), n=n, scheduler=thread_client)\n", | |
| "processes_cpu_times = process(numpy_cpu_heavy_function, args=(2_000,), n=n, scheduler=process_client)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 28, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAGVCAYAAADjWpKuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAA9hAAAPYQGoP6dpAABp7klEQVR4nO3deXhTZfrG8TuFNG2xZSlrpYCCLLIziAgiRShYsQiOuDAq4Oi44CAybiBKq2gVR8cFBXEBt6KOLAoiWAUEB0UQEJxRlB0EZIrSApUS2vf3B9P8CE1LmmZpTr6f6+qlOTnn5MnD27t5c5JzbMYYIwAAAAAA4HdRoS4AAAAAAACrYtINAAAAAECAMOkGAAAAACBAmHQDAAAAABAgTLoBAAAAAAgQJt0AAAAAAAQIk24AAAAAAAKESTcAAAAAAAHCpBsAAAAAgABh0g0AOK2ZM2fKZrMpJiZGO3bsKHV/SkqK2rVrF4LKEEn27NmjjIwMrV+/vtR9GRkZstlswS8KAIDTYNINAPBaYWGhJkyYEOoyEKH27NmjzMxMj5Pum266SV9++WXwiwIA4DSYdAMAvHbJJZcoOztb3377bahLCStOp1PHjx/3eF9BQUGQq6k6fv/9dxlj/LKvxo0bq3v37n7ZFwAA/sSkGwDgtXvvvVeJiYm67777yl1v+/btstlsmjlzZqn7bDabMjIyXLdLPha8YcMGDR06VDVr1lSdOnU0duxYHT9+XJs2bdIll1yi+Ph4NWvWTJMnT3bb37Jly2Sz2fTWW29p7NixatiwoWJjY9W7d2+tW7fOtd6bb74pm83m8Wjoww8/LLvdrj179pT5nDZv3qyRI0fqnHPOUVxcnM4880ylp6dr48aNHut588039be//U1nnnmmHA6HNm/erBEjRuiMM87Qxo0b1b9/f8XHx6tv376SpJycHF1++eVq3LixYmJi1KJFC91yyy3Kzc117XvFihWy2WyaNWtWqfreeOMN2Ww2rV69usznIEnfffedLr/8ctWuXVsxMTHq1KmTXn/9dZ96WmLNmjUaNGiQ6tSpo5iYGHXu3Fnvvfee2zolX1H45JNPdOONN6pevXqKi4tTYWGhV71dtmyZzjvvPEnSyJEjZbPZ3MaSp4+XFxcXa/LkyWrdurUcDofq16+vG264Qbt373Zbr+TrEatXr1avXr0UFxens88+W48//riKi4vd9jdp0iS1atVKsbGxqlWrljp06KBnn3223J4DACIbk24AgNfi4+M1YcIELV68WEuWLPHrvq+66ip17NhRs2fP1s0336x//OMfuuuuuzR48GANHDhQc+fO1cUXX6z77rtPc+bMKbX9+PHjtXXrVr3yyit65ZVXtGfPHqWkpGjr1q2SpKuvvloNGzbUCy+84Lbd8ePH9dJLL2nIkCFKSkoqs749e/YoMTFRjz/+uBYtWqQXXnhB1atX1/nnn69NmzaVWn/cuHHauXOnpk2bpvnz56t+/fqSpGPHjmnQoEG6+OKL9cEHHygzM1OStGXLFl1wwQWaOnWqPvnkEz300ENatWqVLrzwQjmdTklSr1691Llz51LPQZKmTJmi8847zzUx9WTTpk3q0aOH/v3vf+u5557TnDlzdO6552rEiBGl3szwpqeStHTpUvXs2VMHDx7UtGnT9MEHH6hTp066+uqrPb7pcuONN8put+vNN9/U+++/73qz43S97dKli2bMmCFJmjBhgr788kt9+eWXuummm8p8vrfddpvuu+8+paam6sMPP9QjjzyiRYsWqUePHm5vZkjSvn379Kc//UnXXXedPvzwQ6WlpWncuHF66623XOtMnjxZGRkZuvbaa/XRRx/p3Xff1Z///GcdPHiwzBoAAJABAOA0ZsyYYSSZ1atXm8LCQnP22Webrl27muLiYmOMMb179zZt27Z1rb9t2zYjycyYMaPUviSZiRMnum5PnDjRSDJPPfWU23qdOnUyksycOXNcy5xOp6lXr5654oorXMuWLl1qJJkuXbq46jHGmO3btxu73W5uuukmt8eKjo42v/zyi2vZu+++aySZzz//vEI9OX78uDl27Jg555xzzF133VWqnosuuqjUNsOHDzeSzGuvvVbuvouLi43T6TQ7duwwkswHH3zguq/k32LdunWuZV9//bWRZF5//fVy93vNNdcYh8Nhdu7c6bY8LS3NxMXFmYMHD7o9B2962rp1a9O5c2fjdDrd9nnZZZeZRo0amaKiIre6b7jhhnJrNKbs3q5evbrMcVUyjkp8//33RpK5/fbb3dZbtWqVkWTGjx/vWta7d28jyaxatcpt3XPPPdcMGDDA7Tl16tTptPUDAHAyjnQDACokOjpakyZN0po1a0p9hLgyLrvsMrfbbdq0kc1mU1pammtZ9erV1aJFC49nUB82bJjbx4ubNm2qHj16aOnSpa5lt912myTp5Zdfdi2bMmWK2rdvr4suuqjc+o4fP67HHntM5557rqKjo1W9enVFR0frp59+0vfff19q/T/+8Y9l7svTffv379ett96q5ORkVa9eXXa7XU2bNpUkt/1fe+21ql+/vtvR7ueff1716tXT1VdfXe5zWLJkifr27avk5GS35SNGjFBBQUGpj96frqebN2/WDz/8oD/96U+STvSo5OfSSy/V3r17S30KwNNzr2hvvVFS44gRI9yWd+vWTW3atNFnn33mtrxhw4bq1q2b27IOHTq4jbVu3brp22+/1e23367FixcrPz/fp9oAAJGFSTcAoMKuueYadenSRQ888IDro8+VVadOHbfb0dHRiouLU0xMTKnlR48eLbV9w4YNPS47cOCA63aDBg109dVX66WXXlJRUZE2bNigFStW6I477jhtfWPHjtWDDz6owYMHa/78+Vq1apVWr16tjh076vfffy+1fqNGjTzuJy4uTgkJCW7LiouL1b9/f82ZM0f33nuvPvvsM3399df66quvJMlt/w6HQ7fccouys7N18OBB/fe//9V7772nm266SQ6Ho9zncODAAY91lXys/uReSafv6S+//CJJuvvuu2W3291+br/9dkkq9TFuT49f0d56o6TGsp7vqc81MTGx1HoOh8Pt8ceNG6e///3v+uqrr5SWlqbExET17dtXa9as8alGAEBkqB7qAgAA4cdms+mJJ55Qamqqpk+fXur+kolyYWGh2/JTJzr+tG/fPo/LTp1M3XnnnXrzzTf1wQcfaNGiRapVq5brSG153nrrLd1www167LHH3Jbn5uaqVq1apdYv65rRnpZ/9913+vbbbzVz5kwNHz7ctXzz5s0e93Hbbbfp8ccf12uvvaajR4/q+PHjuvXWW0/7HBITE7V3795Sy0tOIFe3bl235afracn648aN0xVXXOHxMVu1auV229Pzr2hvvVFS4969e9W4cWO3+/bs2VPquXqjevXqGjt2rMaOHauDBw/q008/1fjx4zVgwADt2rVLcXFxPtUKALA2jnQDAHzSr18/paam6uGHH9bhw4fd7mvQoIFiYmK0YcMGt+UffPBBwOqZNWuW2+WnduzYoZUrVyolJcVtvT/84Q/q0aOHnnjiCb399tsaMWKEatSocdr922y2UkeSP/roI/3888+Vrr1kInrq/l966SWP6zdq1EhDhw7Viy++qGnTpik9PV1NmjQ57eP07dtXS5YsKXWW9jfeeENxcXGlLrl1up62atVK55xzjr799lt17drV4098fLxXz9+b3pas483R74svvliS3E6EJkmrV6/W999/7zprvK9q1aqlK6+8UqNGjdKvv/6q7du3V2p/AADr4kg3AMBnTzzxhP7whz9o//79atu2rWu5zWbTddddp9dee03NmzdXx44d9fXXXys7Oztgtezfv19DhgzRzTffrLy8PE2cOFExMTEaN25cqXXvvPNOXX311bLZbK6PQZ/OZZddppkzZ6p169bq0KGDvvnmGz355JOljqL6onXr1mrevLnuv/9+GWNUp04dzZ8/Xzk5OWVuc+edd+r888+XJNdZvU9n4sSJWrBggfr06aOHHnpIderU0dtvv62PPvpIkydPVs2aNd3W96anL730ktLS0jRgwACNGDFCZ555pn799Vd9//33Wrt2rf75z3+eti5ve9u8eXPFxsbq7bffVps2bXTGGWcoKSnJ41nnW7Vqpb/85S96/vnnFRUVpbS0NG3fvl0PPvigkpOTddddd3nVs5Olp6erXbt26tq1q+rVq6cdO3bomWeeUdOmTXXOOedUeH8AgMjApBsA4LPOnTvr2muv9TiZfuqppySduMzS4cOHdfHFF2vBggVq1qxZQGp57LHHtHr1ao0cOVL5+fnq1q2b3nnnHTVv3rzUuoMHD5bD4VCfPn28niw9++yzstvtysrK0uHDh9WlSxfNmTNHEyZMqHTtdrtd8+fP15133qlbbrlF1atXV79+/fTpp5+WeQS7W7duatasmWJjY70+atuqVSutXLlS48eP16hRo/T777+rTZs2mjFjRqkTjkne9bRPnz76+uuv9eijj2rMmDH67bfflJiYqHPPPVdXXXWVV3V529u4uDi99tpryszMVP/+/eV0OjVx4kS3676fbOrUqWrevLleffVVvfDCC6pZs6YuueQSZWVlefwO9+n06dNHs2fP1iuvvKL8/Hw1bNhQqampevDBB2W32yu8PwBAZLCZkz83BgBAmFm2bJn69Omjf/7zn7ryyiu92mb+/PkaNGiQPvroI1166aUBrjAwNmzYoI4dO+qFF17w+mi9t3zpKQAA8Iwj3QCAiPGf//xHO3bs0N/+9jd16tTJ7XJk4WLLli3asWOHxo8fr0aNGnk8Qg0AAKoOTqQGAIgYt99+uwYNGqTatWtr1qxZZZ5hvCp75JFHlJqaqsOHD+uf//wnZ8wGAKCK4+PlAAAAAAAECEe6AQAAAAAIECbdAAAAAAAECJNuAAAAAAAChEk3AAAAAAABwqQbAAAAAIAAYdINAAAAAECAMOkGAAAAACBAmHQDAAAAABAgTLoBAAAAAAgQJt0AAAAAAAQIk24AAAAAAAKESTcAAAAAAAHCpBsAAAAAgABh0g0AAAAAQIAw6QYAAAAAIECYdAMAAAAAECBMugEAAAAACBAm3QAAAAAABAiTbgAAAAAAAoRJNwAAAAAAAcKkGwAAAACAAGHSDQAAAABAgDDpBgAAAAAgQJh0AwAAAAAQIEy6AQAAAAAIECbdAAAAAAAECJNuAAAAAAAChEk3AAAAAAABwqQbAAAAAIAAYdINSJo5c6ZsNpvWrFkT6lIAoEw2m82rn2XLlmnZsmWy2Wx6//33Q122V1JSUpSSkhLqMgAESclrr5Kf6tWrq3Hjxho5cqR+/vnnUJcH+FX1UBcAAAC88+WXX7rdfuSRR7R06VItWbLEbfm5556rtWvXBrM0APDJjBkz1Lp1a/3+++9avny5srKy9Pnnn2vjxo2qUaNGqMsD/IJJNwAAYaJ79+5ut+vVq6eoqKhSy/2hoKBAcXFxft8vAJysXbt26tq1qySpT58+Kioq0iOPPKJ58+bpT3/6U6n1ySaEIz5eDnjpiy++UN++fRUfH6+4uDj16NFDH330Uan1vvvuO11++eWqXbu2YmJi1KlTJ73++utu65R87POtt97S2LFj1bBhQ8XGxqp3795at25dsJ4SgAjgdDr1wAMPKCkpSQkJCerXr582bdrktk5KSoratWun5cuXq0ePHoqLi9ONN94oScrPz9fdd9+ts846S9HR0TrzzDM1ZswYHTlyxG0fL7zwgi666CLVr19fNWrUUPv27TV58mQ5nU639Ywxmjx5spo2baqYmBh16dJFH3/8cam6i4uLNWnSJLVq1UqxsbGqVauWOnTooGeffdbPHQJQlZS8ibhjxw6NGDFCZ5xxhjZu3Kj+/fsrPj5effv2lST9+uuvuv3223XmmWcqOjpaZ599th544AEVFha67a+4uFjPP/+8OnXq5MqS7t2768MPP3Rb791339UFF1ygGjVq6IwzztCAAQNKvSbbunWrrrnmGiUlJcnhcKhBgwbq27ev1q9f71pnyZIlSklJUWJiomJjY9WkSRP98Y9/VEFBgWudY8eOadKkSWrdurUcDofq1aunkSNH6r///a/b43mzL4QHjnQDXvj888+VmpqqDh066NVXX5XD4dCLL76o9PR0zZo1S1dffbUkadOmTerRo4fq16+v5557TomJiXrrrbc0YsQI/fLLL7r33nvd9jt+/Hh16dJFr7zyivLy8pSRkaGUlBStW7dOZ599diieKgCLGT9+vHr27KlXXnlF+fn5uu+++5Senq7vv/9e1apVc623d+9eXXfddbr33nv12GOPKSoqSgUFBerdu7d2796t8ePHq0OHDvr3v/+thx56SBs3btSnn34qm80mSdqyZYuGDRvmmpx/++23evTRR/XDDz/otddecz1OZmamMjMz9ec//1lXXnmldu3apZtvvllFRUVq1aqVa73JkycrIyNDEyZM0EUXXSSn06kffvhBBw8eDFrvAATf5s2bJZ34JM+PP/6oY8eOadCgQbrlllt0//336/jx4zp69Kj69OmjLVu2KDMzUx06dNCKFSuUlZWl9evXux0UGTFihN566y39+c9/1sMPP6zo6GitXbtW27dvd63z2GOPacKECRo5cqQmTJigY8eO6cknn1SvXr309ddf69xzz5UkXXrppSoqKtLkyZPVpEkT5ebmauXKla5c2r59uwYOHKhevXrptddeU61atfTzzz9r0aJFOnbsmOLi4lRcXKzLL79cK1as0L333qsePXpox44dmjhxolJSUrRmzRrFxsZ6tS+EEQPAzJgxw0gyq1ev9nh/9+7dTf369c2hQ4dcy44fP27atWtnGjdubIqLi40xxlxzzTXG4XCYnTt3um2flpZm4uLizMGDB40xxixdutRIMl26dHFta4wx27dvN3a73dx0003+fooALGj48OGmRo0aHu8ryZlLL73Ubfl7771nJJkvv/zStax3795Gkvnss8/c1s3KyjJRUVGlsvH99983kszChQs9PnZRUZFxOp3mjTfeMNWqVTO//vqrMcaY3377zcTExJghQ4a4rf+vf/3LSDK9e/d2LbvssstMp06dym8AgLBV8trrq6++Mk6n0xw6dMgsWLDA1KtXz8THx5t9+/aZ4cOHG0nmtddec9t22rRpRpJ577333JY/8cQTRpL55JNPjDHGLF++3EgyDzzwQJl17Ny501SvXt389a9/dVt+6NAh07BhQ3PVVVcZY4zJzc01kswzzzxT5r5KsnH9+vVlrjNr1iwjycyePdtt+erVq40k8+KLL3q9L4QPPl4OnMaRI0e0atUqXXnllTrjjDNcy6tVq6brr79eu3fvdn1Uc8mSJerbt6+Sk5Pd9jFixAgVFBSUOgnSsGHDXEeJJKlp06bq0aOHli5dGsBnBCCSDBo0yO12hw4dJJ346ObJateurYsvvtht2YIFC9SuXTt16tRJx48fd/0MGDDAdZb0EuvWrdOgQYOUmJioatWqyW6364YbblBRUZF+/PFHSSdOBHf06NFS39Ps0aOHmjZt6rasW7du+vbbb3X77bdr8eLFys/Pr1QfAFRN3bt3l91uV3x8vC677DI1bNhQH3/8sRo0aOBa549//KPbNkuWLFGNGjV05ZVXui0fMWKEJOmzzz6TJNdXV0aNGlXm4y9evFjHjx/XDTfc4JZzMTEx6t27tyvn6tSpo+bNm+vJJ5/U008/rXXr1qm4uNhtX506dVJ0dLT+8pe/6PXXX9fWrVtLPd6CBQtUq1Ytpaenuz1ep06d1LBhQ9fjebMvhA8m3cBp/PbbbzLGqFGjRqXuS0pKkiQdOHDA9V9v1ivRsGHDUus2bNiw1HoA4KvExES32w6HQ5L0+++/uy33lF2//PKLNmzYILvd7vYTHx8vY4xyc3MlSTt37lSvXr30888/69lnn9WKFSu0evVqvfDCC26PVZJtZWXfycaNG6e///3v+uqrr5SWlqbExET17duXSzsCFvPGG29o9erVWrdunfbs2aMNGzaoZ8+ervvj4uKUkJDgts2BAwfUsGFDtwMXklS/fn1Vr17dlTX//e9/Va1aNY+ZU+KXX36RJJ133nmlsu7dd9915ZzNZtNnn32mAQMGaPLkyerSpYvq1aun0aNH69ChQ5Kk5s2b69NPP1X9+vU1atQoNW/eXM2bN3c7F8Uvv/yigwcPKjo6utTj7du3z/V43uwL4YPvdAOnUbt2bUVFRWnv3r2l7tuzZ48kqW7dupJOvLj1Zr0S+/btK7Xuvn37Sr1IBoBAO/XFq3Qis2JjY92+k33q/ZI0b948HTlyRHPmzHE7Yn3yyYWk/38DoKzsa9asmet29erVNXbsWI0dO1YHDx7Up59+qvHjx2vAgAHatWsX32cELKJNmzaus5d74imbEhMTtWrVKhlj3O7fv3+/jh8/7sqmevXqqaioSPv27fP4xqL0/zn2/vvvl/rEzamaNm2qV199VZL0448/6r333lNGRoaOHTumadOmSZJ69eqlXr16qaioSGvWrNHzzz+vMWPGqEGDBrrmmmtUt25dJSYmatGiRR4fIz4+3vX/p9sXwgdHuoHTqFGjhs4//3zNmTPH7chQcXGx3nrrLTVu3FgtW7aUJPXt21dLlixxTbJLvPHGG4qLiyt1WZ9Zs2bJGOO6vWPHDq1cuVIpKSmBe0IA4KXLLrtMW7ZsUWJiorp27Vrqp2SSXPKit+QounTiLOUvv/yy2/66d++umJgYvf32227LV65cWerj7ierVauWrrzySo0aNUq//vqr2wmQAESevn376vDhw5o3b57b8jfeeMN1vySlpaVJkqZOnVrmvgYMGKDq1atry5YtHnOurDcEWrZsqQkTJqh9+/Zau3ZtqfurVaum888/3/WJn5J1LrvsMh04cEBFRUUeH+vkE0qebl8IHxzpBk6yZMkSjy/msrKylJqaqj59+ujuu+9WdHS0XnzxRX333XeaNWuW6wXnxIkTtWDBAvXp00cPPfSQ6tSpo7ffflsfffSRJk+erJo1a7rtd//+/RoyZIhuvvlm5eXlaeLEiYqJidG4ceOC8XQBoFxjxozR7NmzddFFF+muu+5Shw4dVFxcrJ07d+qTTz7R3/72N51//vlKTU1VdHS0rr32Wt177706evSopk6dqt9++81tf7Vr19bdd9+tSZMm6aabbtLQoUO1a9cuZWRklPr4Z3p6uuv6vfXq1dOOHTv0zDPPqGnTpjrnnHOC2QYAVcwNN9ygF154QcOHD9f27dvVvn17ffHFF3rsscd06aWXql+/fpJOHCm+/vrrNWnSJP3yyy+67LLL5HA4tG7dOsXFxemvf/2rmjVrpocfflgPPPCAtm7dqksuuUS1a9fWL7/8oq+//lo1atRQZmamNmzYoDvuuENDhw7VOeeco+joaC1ZskQbNmzQ/fffL0maNm2alixZooEDB6pJkyY6evSo65NCJTVdc801evvtt3XppZfqzjvvVLdu3WS327V7924tXbpUl19+uYYMGeLVvhBGQnoaN6CKKDmDZlk/27ZtMytWrDAX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ob4zDuiB5LkHoepJROacPybFZbAXH/XPpDsc+liGsBkHAUQPyLmQCGC2ncznnKuqffNBlR4HQUQfSvfA235Y9pJhPXv21KZNm9yW/fjjj2ratGmIKgIAAAAARBrLTrrvuusuffXVV3rssce0efNmZWdna/r06Ro1alSoSwMAAAAARAjLTrrPO+88zZ07V7NmzVK7du30yCOP6JlnntGf/vSnUJcGAAAAAIgQlv1OtyRddtlluuyyy0JdBgAAAAAgQln2SDcAAAAAAKFm6SPdCGMZeaGuAIBVBCJPnE5p4cITl8SJ8DO5AgiRQL9WIucAv+FINwAAAAAAAcKRblReRk3321ExUsfpUlZj368hyZFuAN46NYOCwVPOkVsAgiFYmVfW6zmyDqgwjnQDAAAAABAglp10Z2RkyGazuf00bNgw1GUBAAAAACKIpT9e3rZtW3366aeu29WqVQthNQAAAACASGPpSXf16tU5ug0AAAAACBnLfrxckn766SclJSXprLPO0jXXXKOtW7eGuiQAAAAAQASx7JHu888/X2+88YZatmypX375RZMmTVKPHj3073//W4mJiR63KSwsVGFhoet2fn6+JMnpdMrpdHr1uCXrebu+JUTFuN10/u+285TlFRLm/YvIcXAKelB+D0LVF0vmXGWyxkcec66q9CNIqtw4CAF6QM6FRJAyr8zXc1WxJwFSpcdBENGHsnvgbU9sxhjj96qqoCNHjqh58+a69957NXbsWI/rZGRkKDMzs9Ty7OxsxcXFBbpEABGkoKBAw4YNU15enhISEoL2uOQcgGAh5wBYnbc5FzGTbklKTU1VixYtNHXqVI/3e3pnNDk5Wbm5uV7/sXA6ncrJyVFqaqrsdrtf6q7yshq73XRGxSin/XNK3Thadl+v0z1utx8KC52IHAenoAfl9yA/P19169YN+otRS+bcKRkUDB5zLsxzq6Kq3DgIAXpAzoVEkDKvzNdzEZR1VXocBBF9KLsH3uacZT9efqrCwkJ9//336tWrV5nrOBwOORyOUsvtdnuFB5gv24StMibW9uKjvk+6LdK7iBoHZaAHnnsQqp5YMud8zRk/cMu5qtCLEKgy4yCE6AE5F1RBzrxSr+eqWj+CoEqOgxCgD6V74G0/LHsitbvvvluff/65tm3bplWrVunKK69Ufn6+hg8fHurSAAAAAAARwrJHunfv3q1rr71Wubm5qlevnrp3766vvvpKTZs2DXVpAAAAAIAIYdlJ9zvvvBPqEgAAAAAAEc6yHy8HAAAAACDUmHQDAAAAABAglv14OYIoI8/9ttMpLVx44pISEX6GQwBBcGoGBQM5ByBUgpV55BzgN0y68f8yavq4XQhe8AKwFl/zp1KPSXYBCDPBzMqoGKnj9BPXBT/5kmFkJ1BhfLwcAAAAAIAAiZhJd1ZWlmw2m8aMGRPqUgAAAAAAESIiJt2rV6/W9OnT1aFDh1CXAgAAAACIIJafdB8+fFh/+tOf9PLLL6t27dqhLgcAAAAAEEEsP+keNWqUBg4cqH79+oW6FAAAAABAhLH02cvfeecdrV27VqtXr/Zq/cLCQhUWFrpu5+fnS5KcTqecTqdX+yhZz9v1q5SoGN+2O+W5hnUP/IQe0AOp/B6Eqi9VNud8zZ/KqET9jG96INEDiZwLuiBmpfN/j+U89TGrWk8CqMqOgyCjD2X3wNue2Iwxxu9VVQG7du1S165d9cknn6hjx46SpJSUFHXq1EnPPPOMx20yMjKUmZlZanl2drbi4uICWS6ACFNQUKBhw4YpLy9PCQkJQXtccg5AsJBzAKzO25yz7KR73rx5GjJkiKpVq+ZaVlRUJJvNpqioKBUWFrrdJ3l+ZzQ5OVm5uble/7FwOp3KyclRamqq7Ha7f55MsGQ19m27cbvdboZ1D/yEHtADqfwe5Ofnq27dukF/MVplc87X/KmMU7KrIhjf9ECiBxI5F3RBzEpnVIxy2j+n1I2jZT/5Ot2VyM5wU2XHQZDRh7J74G3OWfbj5X379tXGjRvdlo0cOVKtW7fWfffdV2rCLUkOh0MOh6PUcrvdXuEB5ss2IXdyoFZEGc8zLHvgZ/SAHkieexCqnlTZnPM1fyrDD7UzvumBRA8kci5oQpCV9uKj7pPuqtSPIKly4yBE6EPpHnjbD8tOuuPj49WuXTu3ZTVq1FBiYmKp5QAAAAAABILlz14OAAAAAECoWPZItyfLli0LdQkAAAAAgAjCkW4AAAAAAAKESTcAAAAAAAESUR8vx2lk5IW6AgCRivwBgNMLZlY6ndLChScuERbhZ6wGKosj3QAAAAAABAhHuq0qo6YP23CkCUAFZDUOzfW1K4psA+Crqppz5BoQVjjSDQAAAABAgFh20j116lR16NBBCQkJSkhI0AUXXKCPP/441GUBAAAAACKIZSfdjRs31uOPP641a9ZozZo1uvjii3X55Zfr3//+d6hLAwAAAABECMt+pzs9Pd3t9qOPPqqpU6fqq6++Utu2bUNUFQAAAAAgklh20n2yoqIi/fOf/9SRI0d0wQUXlLleYWGhCgsLXbfz8/MlSU6nU06n06vHKlnP2/UDJiqm4tv4qeYq04MQogf0QCq/B6Hqi19zzpecCYUA9JrxTQ8keiCRcyEThN4yvulBCfpQdg+87YnNGGP8XlUVsXHjRl1wwQU6evSozjjjDGVnZ+vSSy8tc/2MjAxlZmaWWp6dna24uLhAlgogwhQUFGjYsGHKy8tTQkJC0B6XnAMQLOQcAKvzNucsPek+duyYdu7cqYMHD2r27Nl65ZVX9Pnnn+vcc8/1uL6nd0aTk5OVm5vr9R8Lp9OpnJwcpaamym63++V5+CSrccW3GbfbLw9dZXoQQvSAHkjl9yA/P19169YN+otRv+bcxtGyV8VL6ZzKT9l2MsY3PZDogUTOhUwAcu1UjG96UII+lN0Db3PO0h8vj46OVosWLSRJXbt21erVq/Xss8/qpZde8ri+w+GQw+Eotdxut1d4gPmyjV/58gfCz/WGvAdVAD2gB5LnHoSqJ37NueKjVfPF6KkC2GvGNz2Q6IFEzgVdEHvL+KYHJehD6R542w/Lnr3cE2OM2zufAAAAAAAEkmWPdI8fP15paWlKTk7WoUOH9M4772jZsmVatGhRqEsDAAAAAEQIy066f/nlF11//fXau3evatasqQ4dOmjRokVKTU0NdWkAAAAAgAhh2Un3q6++GuoSAAAAAAARLqK+0w0AAAAAQDBZ9kh3xMvIC3UFAKxu3O6gnkEXAIKOnAPgBxzpBgAAAAAgQDjSXRVl1PTDPjjSDSDAshpLVeH6teQdgECpKjl3MjIPCDsc6QYAAAAAIEAsO+nOysrSeeedp/j4eNWvX1+DBw/Wpk2bQl0WAAAAACCCWHbS/fnnn2vUqFH66quvlJOTo+PHj6t///46cuRIqEsDAAAAAEQIy36ne9GiRW63Z8yYofr16+ubb77RRRddFKKqAAAAAACRxLKT7lPl5Z046USdOnXKXKewsFCFhYWu2/n5+ZIkp9Mpp9Pp1eOUrOft+h5Fxfi+7f8XUvl9+PzQfuhBmKMH9EAqvweh6otfc84fWeUPIegl45seSPRAIudCIkh9ZXzTgxL0oeweeNsTmzHG+L2qKsYYo8svv1y//fabVqxYUeZ6GRkZyszMLLU8OztbcXFxgSwRQIQpKCjQsGHDlJeXp4SEhKA9LjkHIFjIOQBW523ORcSke9SoUfroo4/0xRdfqHHjxmWu5+md0eTkZOXm5nr9x8LpdConJ0epqamy2+2+FZxVdo1eG7e78vvwkV96EOboAT2Qyu9Bfn6+6tatG/QXo37NuY2jZa8Kl9IJQd4xvumBRA8kci4kgpR5jG96UII+lN0Db3PO8h8v/+tf/6oPP/xQy5cvL3fCLUkOh0MOh6PUcrvdXuEB5ss2Lv4I9yrwC1GpHlgEPaAHkucehKonfs254qNV48VoCMcX45seSPRAIueCKsh9ZXzTgxL0oXQPvO2HZSfdxhj99a9/1dy5c7Vs2TKdddZZoS4JAAAAABBhLDvpHjVqlLKzs/XBBx8oPj5e+/btkyTVrFlTsbGxIa4OAAAAABAJLHud7qlTpyovL08pKSlq1KiR6+fdd98NdWkAAAAAgAhh2SPdEXB+OAAAAABAFWfZI90AAAAAAISaZY90h7WMvFBXAACnN253lbhSAgAEDDkHwA840g0AAAAAQIBwpDtQshr7fr1tjnQDCAeVyblTkXsAqiJ/5lxlkZNA2OJINwAAAAAAAWLpSffy5cuVnp6upKQk2Ww2zZs3L9QlAQAAAAAiiKUn3UeOHFHHjh01ZcqUUJcCAAAAAIhAlv5Od1pamtLS0kJdBgAAAAAgQln6SDcAAAAAAKFk6SPdFVVYWKjCwkLX7fz8fEmS0+mU0+n0ah8l6zmjYnwvxMvHqqpcPQjz51EZ9IAeSOX3IFR9qTI5V3qn/ttXEDC+6YFEDyRyLqiC3E/GNz0oQR/K7oG3PbEZY4zfq6qCbDab5s6dq8GDB5e5TkZGhjIzM0stz87OVlxcXACrAxBpCgoKNGzYMOXl5SkhISFoj0vOAQgWcg6A1Xmbc0y6T+LpndHk5GTl5uZ6/cfC6XQqJydHqRtHy+7rdR3H7fZtuyrC1YPUVNnt9lCXExL0gB5I5fcgPz9fdevWDfqL0SqTc6cKs9xjfNMDiR5I5FxQBTknGd/0oAR9KLsH3uYcHy8/icPhkMPhKLXcbrdXeIDZi4/6HtIWGcy+9M1q6AE9kDz3IFQ9qTI5V7oA/+wnyBjf9ECiBxI5FxQh6ifjmx6UoA+le+BtPyw96T58+LA2b97sur1t2zatX79ederUUZMmTUJYGQAAAAAgElh60r1mzRr16dPHdXvs2LGSpOHDh2vmzJkhqgoAAAAAECksPelOSUlRhHxlHQAAAABQBXGdbgAAAAAAAsTSR7orq+Qoecn1Hb3hdDpVUFCg/KPFsvt6lL0Cj1cVuXqQnx+xJ1ugB/RAKr8HJbkS6k/jhCznThVmucf4pgcSPZDIuaAKck4yvulBCfpQdg+8zbmIuWSYL3bv3q3k5ORQlwHAwnbt2qXGjRuH7PHJOQCBRs4BsLrT5RyT7nIUFxdrz549io+Pl81m82qbkmtB7tq1K6jXpKxK6AE9kOiBVH4PjDE6dOiQkpKSFBUVum/6kHO+oQf0QKIHEjlnZfSAHpSgD2X3wNuc4+Pl5YiKivL5ndmEhISIHZQl6AE9kOiBVHYPatasGYJq3JFzlUMP6IFEDyRyzsroAT0oQR8898CbnONEagAAAAAABAiTbgAAAAAAAoRJt585HA5NnDhRDocj1KWEDD2gBxI9kKzbA6s+r4qgB/RAogeSdXtg1edVEfSAHpSgD5XvASdSAwAAAAAgQDjSDQAAAABAgDDpBgAAAAAgQJh0AwAAAAAQIEy6/ejFF1/UWWedpZiYGP3hD3/QihUrQl1S0GRlZem8885TfHy86tevr8GDB2vTpk2hLiuksrKyZLPZNGbMmFCXEnQ///yzrrvuOiUmJiouLk6dOnXSN998E+qygub48eOaMGGCzjrrLMXGxurss8/Www8/rOLi4lCXVmmRnHMSWXcqco6cs2LOSZGddeRcaZGadeSc/3KOSbefvPvuuxozZoweeOABrVu3Tr169VJaWpp27twZ6tKC4vPPP9eoUaP01VdfKScnR8ePH1f//v115MiRUJcWEqtXr9b06dPVoUOHUJcSdL/99pt69uwpu92ujz/+WP/5z3/01FNPqVatWqEuLWieeOIJTZs2TVOmTNH333+vyZMn68knn9Tzzz8f6tIqJdJzTiLrTkbOkXNWzDmJrCPn3EVq1pFzfs45A7/o1q2bufXWW92WtW7d2tx///0hqii09u/fbySZzz//PNSlBN2hQ4fMOeecY3Jyckzv3r3NnXfeGeqSguq+++4zF154YajLCKmBAweaG2+80W3ZFVdcYa677roQVeQf5FxpkZp15Bw5Z9WcM4asO1Wk5pwxkZ115Jx/c44j3X5w7NgxffPNN+rfv7/b8v79+2vlypUhqiq08vLyJEl16tQJcSXBN2rUKA0cOFD9+vULdSkh8eGHH6pr164aOnSo6tevr86dO+vll18OdVlBdeGFF+qzzz7Tjz/+KEn69ttv9cUXX+jSSy8NcWW+I+c8i9SsI+fIOSvmnETWeRKpOSdFdtaRc/7Nuer+Li4S5ebmqqioSA0aNHBb3qBBA+3bty9EVYWOMUZjx47VhRdeqHbt2oW6nKB65513tHbtWq1evTrUpYTM1q1bNXXqVI0dO1bjx4/X119/rdGjR8vhcOiGG24IdXlBcd999ykvL0+tW7dWtWrVVFRUpEcffVTXXnttqEvzGTlXWqRmHTlHzknWzDmJrDtVpOacRNaRc/7NOSbdfmSz2dxuG2NKLYsEd9xxhzZs2KAvvvgi1KUE1a5du3TnnXfqk08+UUxMTKjLCZni4mJ17dpVjz32mCSpc+fO+ve//62pU6dGTEi/++67euutt5Sdna22bdtq/fr1GjNmjJKSkjR8+PBQl1cp5Nz/i8SsI+dOIOesnXMSWVciEnNOIuskck7yb84x6faDunXrqlq1aqXeAd2/f3+pd0qt7q9//as+/PBDLV++XI0bNw51OUH1zTffaP/+/frDH/7gWlZUVKTly5drypQpKiwsVLVq1UJYYXA0atRI5557rtuyNm3aaPbs2SGqKPjuuece3X///brmmmskSe3bt9eOHTuUlZUVti9GyTl3kZp15NwJ5Jw1c04i604WqTknkXUSOSf5N+f4TrcfREdH6w9/+INycnLclufk5KhHjx4hqiq4jDG64447NGfOHC1ZskRnnXVWqEsKur59+2rjxo1av36966dr167605/+pPXr11s+nEv07Nmz1KVFfvzxRzVt2jREFQVfQUGBoqLc47VatWphfSkdcu6ESM86cu4Ecs6aOSeRdRI5J5F1Ejkn+TnnKnlSN/zPO++8Y+x2u3n11VfNf/7zHzNmzBhTo0YNs3379lCXFhS33XabqVmzplm2bJnZu3ev66egoCDUpYVUpJ3p0hhjvv76a1O9enXz6KOPmp9++sm8/fbbJi4uzrz11luhLi1ohg8fbs4880yzYMECs23bNjNnzhxTt25dc++994a6tEqJ9JwzhqzzhJwj56yUc8aQdeScZ5GWdeScf3OOSbcfvfDCC6Zp06YmOjradOnSJaIurSDJ48+MGTNCXVpIRVpAl5g/f75p166dcTgcpnXr1mb69OmhLimo8vPzzZ133mmaNGliYmJizNlnn20eeOABU1hYGOrSKi2Sc84Yss4Tco6cs1rOGRPZWUfOeRaJWUfO+S/nbMYY49PxdgAAAAAAUC6+0w0AAAAAQIAw6QYAAAAAIECYdAMAAAAAECBMugEAAAAACBAm3QAAAAAABAiTbgAAAAAAAoRJNwAAAAAAAcKkGwAAAACAAGHSjYi1bNky2Ww2HTx40O/7TklJ0ZgxY/y+XwCoCHIOgNWRcwgH1UNdAGBFc+bMkd1uD3UZZcrIyNC8efO0fv16v+xvxIgROnjwoObNm+eX/QGo+sg5AFZHzsFfmHQDAVCnTp1QlxAURUVFstlsoS4DQAiQcwCsjpyDv/DxcvjF+++/r/bt2ys2NlaJiYnq16+fjhw54rp/xowZatOmjWJiYtS6dWu9+OKLbtvv3r1b11xzjerUqaMaNWqoa9euWrVqlev+qVOnqnnz5oqOjlarVq305ptvum1vs9n0yiuvaMiQIYqLi9M555yjDz/80G2dhQsXqmXLloqNjVWfPn20fft2t/t37Nih9PR01a5dWzVq1FDbtm21cOHCMp/ziy++qHPOOUcxMTFq0KCBrrzyStd9p34cqVmzZnrsscd04403Kj4+Xk2aNNH06dMr1IP58+frD3/4g2JiYnT22WcrMzNTx48fL7O+ZcuWqVu3bqpRo4Zq1aqlnj17aseOHZo5c6YyMzP17bffymazyWazaebMmZKkp59+Wu3bt1eNGjWUnJys22+/XYcPH3btc+bMmapVq5YWLFigc889Vw6HQyNHjtTrr7+uDz74wLW/ZcuWlVkXEK7IOXKOnIPVkXPkHDkXIAaopD179pjq1aubp59+2mzbts1s2LDBvPDCC+bQoUPGGGOmT59uGjVqZGbPnm22bt1qZs+eberUqWNmzpxpjDHm0KFD5uyzzza9evUyK1asMD/99JN59913zcqVK40xxsyZM8fY7XbzwgsvmE2bNpmnnnrKVKtWzSxZssRVgyTTuHFjk52dbX766SczevRoc8YZZ5gDBw4YY4zZuXOncTgc5s477zQ//PCDeeutt0yDBg2MJPPbb78ZY4wZOHCgSU1NNRs2bDBbtmwx8+fPN59//rnH57x69WpTrVo1k52dbbZv327Wrl1rnn32Wdf9vXv3NnfeeafrdtOmTU2dOnXMCy+8YH766SeTlZVloqKizPfff+9VDxYtWmQSEhLMzJkzzZYtW8wnn3ximjVrZjIyMjzW53Q6Tc2aNc3dd99tNm/ebP7zn/+YmTNnmh07dpiCggLzt7/9zbRt29bs3bvX7N271xQUFBhjjPnHP/5hlixZYrZu3Wo+++wz06pVK3Pbbbe59jtjxgxjt9tNjx49zL/+9S/zww8/mIMHD5qrrrrKXHLJJa79FRYWejd4gDBBzpFz5Bysjpwj58i5wGHSjUr75ptvjCSzfft2j/cnJyeb7Oxst2WPPPKIueCCC4wxxrz00ksmPj7eFain6tGjh7n55pvdlg0dOtRceumlrtuSzIQJE1y3Dx8+bGw2m/n444+NMcaMGzfOtGnTxhQXF7vWue+++9xCun379mWG3qlmz55tEhISTH5+vsf7PYX0dddd57pdXFxs6tevb6ZOnWqMOX0PevXqZR577DG3ZW+++aZp1KiRx/UPHDhgJJlly5Z5vH/ixImmY8eOZT09l/fee88kJia6bs+YMcNIMuvXr3dbb/jw4ebyyy8/7f6AcEXOlUbOAdZCzpVGzsFf+Hg5Kq1jx47q27ev2rdvr6FDh+rll1/Wb7/9Jkn673//q127dunPf/6zzjjjDNfPpEmTtGXLFknS+vXr1blz5zK/N/P999+rZ8+ebst69uyp77//3m1Zhw4dXP9fo0YNxcfHa//+/a59dO/e3e37KhdccIHb9qNHj9akSZPUs2dPTZw4URs2bCjzOaempqpp06Y6++yzdf311+vtt99WQUFBuX06uT6bzaaGDRu66jtdD7755hs9/PDDbj28+eabtXfvXo+PW6dOHY0YMUIDBgxQenq6nn32We3du7fc+iRp6dKlSk1N1Zlnnqn4+HjdcMMNOnDggNtHy6Kjo92eCxAJyDlyDrA6co6cQ+Aw6UalVatWTTk5Ofr444917rnn6vnnn1erVq20bds2FRcXS5JefvllrV+/3vXz3Xff6auvvpIkxcbGnvYxTj25gzGm1LJTzy5ps9lcj2+MOe1j3HTTTdq6dauuv/56bdy4UV27dtXzzz/vcd34+HitXbtWs2bNUqNGjfTQQw+pY8eO5V6uorz6TteD4uJiZWZmuvVw48aN+umnnxQTE+NxmxkzZujLL79Ujx499O6776ply5aunnuyY8cOXXrppWrXrp1mz56tb775Ri+88IIkyel0utaLjY3lZBuIOOQcOQdYHTlHziFwmHTDL2w2m3r27KnMzEytW7dO0dHRmjt3rho0aKAzzzxTW7duVYsWLdx+zjrrLEkn3jFcv369fv31V4/7btOmjb744gu3ZStXrlSbNm28ru/cc88tFVCeAis5OVm33nqr5syZo7/97W96+eWXy9xn9erV1a9fP02ePFkbNmzQ9u3btWTJEq9rOtnpetClSxdt2rSpVA9btGihqKiyf407d+6scePGaeXKlWrXrp2ys7MlnXh3s6ioyG3dNWvW6Pjx43rqqafUvXt3tWzZUnv27PGqfk/7A6yGnCPnyDlYHTlHzpFzgcElw1Bpq1at0meffab+/furfv36WrVqlf773/+6QjQjI0OjR49WQkKC0tLSVFhYqDVr1ui3337T2LFjde211+qxxx7T4MGDlZWVpUaNGmndunVKSkrSBRdcoHvuuUdXXXWVunTpor59+2r+/PmaM2eOPv30U69rvPXWW/XUU09p7NixuuWWW/TNN9+4zvBYYsyYMUpLS1PLli3122+/acmSJWX+IViwYIG2bt2qiy66SLVr19bChQtVXFysVq1a+dTD0/XgoYce0mWXXabk5GQNHTpUUVFR2rBhgzZu3KhJkyaV2t+2bds0ffp0DRo0SElJSdq0aZN+/PFH3XDDDZJOnH1z27ZtWr9+vRo3bqz4+Hg1b95cx48f1/PPP6/09HT961//0rRp07yqv1mzZlq8eLE2bdqkxMRE1axZs0pf1xKoKHKOnCPnYHXkHDlHzgVQKL9QDmv4z3/+YwYMGGDq1atnHA6HadmypXn++efd1nn77bdNp06dTHR0tKldu7a56KKLzJw5c1z3b9++3fzxj380CQkJJi4uznTt2tWsWrXKdf+LL75ozj77bGO3203Lli3NG2+84bZ/SWbu3Lluy2rWrGlmzJjhuj1//nzTokUL43A4TK9evcxrr73mduKNO+64wzRv3tw4HA5Tr149c/3115vc3FyPz3nFihWmd+/epnbt2iY2NtZ06NDBvPvuu677PZ144x//+IfbPjp27GgmTpzodQ8WLVpkevToYWJjY01CQoLp1q2bmT59usf69u3bZwYPHmwaNWpkoqOjTdOmTc1DDz1kioqKjDHGHD161Pzxj380tWrVMpJcfXr66adNo0aNTGxsrBkwYIB544033Ho0Y8YMU7NmzVKPt3//fpOammrOOOMMI8ksXbrUY11AuCLnyDlyDlZHzpFz5Fzg2Izx4ssRAAAAAACgwvhONwAAAAAAAcKkGwAAAACAAGHSDQAAAABAgDDpBgAAAAAgQJh0AwAAAAAQIEy6AQAAAAAIECbdAAAAAAAECJNuAAAAAAAChEk3AAAAAAABwqQbAAAAAIAAYdINAAAAAECAMOkGAAAAACBA/g8PTJ5EmTEghAAAAABJRU5ErkJggg==\n", | |
| "text/plain": [ | |
| "<Figure size 1000x400 with 3 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, axes = plot_all(sync_cpu_times, threads_cpu_times, processes_cpu_times, \n", | |
| " title='Numpy array operations', figsize=(10,4))\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 29, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "sync_save_text_times = process(save_text_data, args=(10_000_000,), n=n, scheduler=None)\n", | |
| "threads_save_text_times = process(save_text_data, args=(10_000_000,), n=n, scheduler=thread_client)\n", | |
| "processes_save_text_times = process(save_text_data, args=(10_000_000,), n=n, scheduler=process_client)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 30, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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xIlq2bKlYmNjtWvXLl1zzTX63//+51pXWlqaGjdurBkzZmjAgAE6ePCg3n//fd17772KjIw8Yy1JSUnlpjkcDtc2Dh48KGOM28D0pIqmVcX+/ft16NAht8H8qU59E0KSLr30UrVt21ZfffWV/vznPysuLs6r7R84cECNGjUqN/2306ry71GZnTt3qmfPnmrVqpVeeOEFNW/eXNHR0friiy80cuRIj9YBAEAgMegGAAQlu92uCRMm6Pnnn9c333wjSVq6dKn27Nmj5cuXu86mStKhQ4fKLR8ZGamhQ4fq73//uw4dOqScnByVlJRoxIgRPqmvTp06stls2r9/f7nn9u3b59W669Wrp6SkJH300UcVPn/qGXhJmjBhgjZu3KiLLrpI48eP15VXXun63Hl1JCUlVfgafjutKv8elZk/f76Kioo0d+5cNWvWzDU9kF9vBgBAVXB5OQCgxtu7d2+F009enpycnCxJrrt7OxwOt/n+8Y9/VLj8iBEjdPToUc2aNUszZ85Ut27d1Lp1a5/UHBcXpy5dumj+/Pk6duyYa/qRI0cqvMt5RU49c36qK6+8UgcOHFBpaanr7P+pP61atXLNm5ubq+zsbI0bN065ublKTEzUDTfc4FbTyX55eta4b9+++uSTT9zeUCgtLS33nelV+feorIaK1mGM0SuvvOJRrQAABBpnugEANd7AgQPVpEkTpaenq3Xr1iorK1NeXp6effZZ1a5dW/fee68kqXv37qpTp47uvPNOTZgwQXa7XW+//ba++uqrCtfbunVrdevWTdnZ2dq1a5emT5/u07ofe+wxDRo0SAMHDtS9996r0tJSPfPMM6pdu7Z++eWXMy7frl07zZ07V1OnTtVFF12kiIgIdenSRTfeeKPefvttXXHFFbr33nt1ySWXyG63a/fu3Vq2bJmuvvpqDRkyRHv37tUf//hH9e7dWxMmTFBERIRmz56tXr166YEHHtDkyZMlnfgu8piYGL399ttq06aNateureTkZNebGb81btw4vf/++7r88ss1fvx4xcbG6qWXXnL7GjCpav8e7dq1kyQ9/fTTSktLU2RkpNq3b6/U1FRFRUXppptu0gMPPKCjR49q6tSpOnjwYBX/NQAACJBA38kNAIAzmT17tsnIyDDnn3++qV27trHb7aZp06Zm6NCh5r///a/bvKtXrzbdunUzsbGxpn79+ua2224z69evr/Tu3NOnTzeSTExMjCkoKCj3fGV3Lx85cmS5eZs1a2aGDRvmNm3evHmmXbt2JioqyjRt2tQ89dRTZtSoUaZOnTpnfN2//PKLufbaa81ZZ51lbDab2929nU6n+dvf/mY6dOhgoqOjTe3atU3r1q3NHXfcYX744Qdz/Phx07t3b9OwYUOzd+9et/U+88wzRpKZN2+ea9qsWbNM69atjd1uN5LMhAkTTlvbv//9b9O1a1fjcDhMo0aNzP333+/q5al3L/f036OkpMTcdtttpn79+q7XenI9CxYscL3Os88+29x///3mww8/NJLMsmXLzthHAAACie/pBgDAj5xOpzp27Kizzz5bS5YsCXQ5AADAYlxeDgCAhW699ValpqaqcePG2rdvn6ZNm6Zvv/1WL7zwQqBLAwAAfsCgGwAACx0+fFj33Xeffv75Z9ntdnXu3FmLFi1S//79A10aAADwAy4vBwAAAADAInxlGAAAAAAAFmHQDQAAAACARRh0AwAAAABgEQbdAAAAAABYhEE3AAAAAAAWYdANAAAAAIBFGHQDAAAAAGARBt0AAAAAAFiEQTcAAAAAABZh0A0AAAAAgEUYdAMAAAAAYBEG3QAAAAAAWIRBNwAAAAAAFmHQDQAAAACARRh0AwAAAABgEQbdAAAAAABYhEE3AAAAAAAWYdANAAAAAIBFGHQDAAAAAGARBt0AAAAAAFiEQTcAAAAAABZh0A0AAAAAgEUYdAMAAAAAYBEG3QAAAAAAWIRBNwAAAAAAFmHQDQAAAACARRh0AwAAAABgEQbdAAAAAABYhEE3AAAAAAAWYdANSJo5c6ZsNpvWrVsX6FIAoFI2m82jn+XLl2v58uWy2Wx67733Al22R/r06aM+ffoEugwAfnLyb6+TP7Vq1VKTJk00YsQI/fjjj4EuD/CpWoEuAAAAeOazzz5ze/z4449r2bJlWrp0qdv0Cy64QOvXr/dnaQBQLTNmzFDr1q31v//9TytWrFB2drY+/fRTbdy4UXFxcYEuD/AJBt0AAASJrl27uj2uX7++IiIiyk33heLiYsXGxvp8vQBwqgsvvFBdunSRJPXt21elpaV6/PHHNX/+fP3hD38oNz/ZhGDE5eWAh1atWqV+/fopPj5esbGx6t69uz744INy833zzTe6+uqrVadOHUVHR6tjx456/fXX3eY5ednnW2+9pTFjxqhRo0aKiYlR7969tWHDBn+9JABhwOl06pFHHlFycrISEhLUv39/bdq0yW2ePn366MILL9SKFSvUvXt3xcbG6pZbbpEkFRYW6r777lOLFi0UFRWls88+W6NHj1ZRUZHbOl566SX16tVLDRo0UFxcnNq1a6dJkybJ6XS6zWeM0aRJk9SsWTNFR0erc+fO+vDDD8vVXVZWpokTJ6pVq1aKiYnRWWedpfbt2+uFF17wcYcA1CQn30TcsWOHhg8frtq1a2vjxo0aMGCA4uPj1a9fP0nSL7/8orvuuktnn322oqKidM455+iRRx5RSUmJ2/rKysr04osvqmPHjq4s6dq1q95//323+WbPnq1u3bopLi5OtWvX1sCBA8v9TbZ161bdeOONSk5OlsPhUMOGDdWvXz/l5eW55lm6dKn69OmjpKQkxcTEqGnTpvr973+v4uJi1zzHjh3TxIkT1bp1azkcDtWvX18jRozQzz//7LY9T9aF4MCZbsADn376qVJTU9W+fXv985//lMPh0Msvv6z09HTNmjVLN9xwgyRp06ZN6t69uxo0aKC///3vSkpK0ltvvaXhw4dr//79euCBB9zW+/DDD6tz58569dVXVVBQoMzMTPXp00cbNmzQOeecE4iXCiDEPPzww+rRo4deffVVFRYW6sEHH1R6erq+/fZbRUZGuubbu3ev/vjHP+qBBx7Qk08+qYiICBUXF6t3797avXu3Hn74YbVv317/+c9/NH78eG3cuFEff/yxbDabJGnLli3KyMhwDc6/+uorPfHEE/ruu+/02muvubaTlZWlrKws3Xrrrbr22mu1a9cu3X777SotLVWrVq1c802aNEmZmZkaN26cevXqJafTqe+++06HDh3yW+8A+N/mzZslnbiS5/vvv9exY8d01VVX6Y477tBDDz2k48eP6+jRo+rbt6+2bNmirKwstW/fXitXrlR2drby8vLcTooMHz5cb731lm699VY99thjioqK0vr167V9+3bXPE8++aTGjRunESNGaNy4cTp27JieeeYZ9ezZU1988YUuuOACSdIVV1yh0tJSTZo0SU2bNlV+fr5Wr17tyqXt27dr0KBB6tmzp1577TWdddZZ+vHHH/XRRx/p2LFjio2NVVlZma6++mqtXLlSDzzwgLp3764dO3ZowoQJ6tOnj9atW6eYmBiP1oUgYgCYGTNmGElm7dq1FT7ftWtX06BBA3P48GHXtOPHj5sLL7zQNGnSxJSVlRljjLnxxhuNw+EwO3fudFs+LS3NxMbGmkOHDhljjFm2bJmRZDp37uxa1hhjtm/fbux2u7ntttt8/RIBhKBhw4aZuLi4Cp87mTNXXHGF2/R3333XSDKfffaZa1rv3r2NJPPJJ5+4zZudnW0iIiLKZeN7771nJJlFixZVuO3S0lLjdDrNG2+8YSIjI80vv/xijDHm4MGDJjo62gwZMsRt/n//+99Gkundu7dr2pVXXmk6dux4+gYACFon//b6/PPPjdPpNIcPHzYLFy409evXN/Hx8Wbfvn1m2LBhRpJ57bXX3JadNm2akWTeffddt+lPP/20kWSWLFlijDFmxYoVRpJ55JFHKq1j586dplatWuaee+5xm3748GHTqFEjc/311xtjjMnPzzeSzOTJkytd18lszMvLq3SeWbNmGUlmzpw5btPXrl1rJJmXX37Z43UheHB5OXAGRUVFWrNmja699lrVrl3bNT0yMlJDhw7V7t27XZdqLl26VP369VNKSorbOoYPH67i4uJyN0HKyMhwnSWSpGbNmql79+5atmyZha8IQDi56qqr3B63b99e0olLN09Vp04dXX755W7TFi5cqAsvvFAdO3bU8ePHXT8DBw503SX9pA0bNuiqq65SUlKSIiMjZbfbdfPNN6u0tFTff/+9pBM3gjt69Gi5z2l2795dzZo1c5t2ySWX6KuvvtJdd92lxYsXq7Cw0Ks+AKiZunbtKrvdrvj4eF155ZVq1KiRPvzwQzVs2NA1z+9//3u3ZZYuXaq4uDhde+21btOHDx8uSfrkk08kyfXRlZEjR1a6/cWLF+v48eO6+eab3XIuOjpavXv3duVc3bp1de655+qZZ57Rc889pw0bNqisrMxtXR07dlRUVJT+9Kc/6fXXX9fWrVvLbW/hwoU666yzlJ6e7ra9jh07qlGjRq7tebIuBA8G3cAZHDx4UMYYNW7cuNxzycnJkqQDBw64/uvJfCc1atSo3LyNGjUqNx8AVFdSUpLbY4fDIUn63//+5za9ouzav3+/vv76a9ntdref+Ph4GWOUn58vSdq5c6d69uypH3/8US+88IJWrlyptWvX6qWXXnLb1slsqyz7TjV27Fj97W9/0+eff660tDQlJSWpX79+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kt3brwwLsWzyJY49/6HX1vA050L68vKoqCidd955kqQuXbpo7dq1euGFF/SPf/yjwvkdDoccDke56Xa7vco7Z3WW8RlvfzkE0YEY0D6HGXrtW4HqZY3MOW8z66QQ3T859vyHXvtWSORc2VHvB93sU2fEsec/9Nq3PO1lyN69vCLGGLd3PgEAAAAAsFLInul++OGHlZaWppSUFB0+fFjvvPOOli9fro8++ijQpQEAAAAAwkTIDrr379+voUOHau/evUpMTFT79u310UcfKTU1NdClAQAAAADCRMgOuv/5z38GugQAAAAAQJgLq890AwAAAADgTyF7pjusZRYEugIA8ByZBaCmGrubu48D8BpnugEAAAAAsAhnumuizEQvl+esEYAA8Da7Trtucg1AAGQ3kbz9nm7yCwh7nOkGAAAAAMAiITvozs7O1sUXX6z4+Hg1aNBAgwcP1qZNmwJdFgAAAAAgjITsoPvTTz/VyJEj9fnnnys3N1fHjx/XgAEDVFRUFOjSAAAAAABhImQ/0/3RRx+5PZ4xY4YaNGigL7/8Ur169QpQVQAAAACAcBKyg+7fKig4cROLunXrVjpPSUmJSkpKXI8LCwslSU6nU06n06PtnJzP0/krFBFd/WVPbNy75YOAT/oMj9BrawSqn5bmnLfZdfqNWrfuGopjz3/otTVCIud8kWvsV5Xi2PMfem0NT/tpM8YYi2sJOGOMrr76ah08eFArV66sdL7MzExlZWWVm56Tk6PY2FgrSwQQZoqLi5WRkaGCggIlJCT4bbvkHAB/IecAhDpPcy4sBt0jR47UBx98oFWrVqlJkyaVzlfRO6MpKSnKz8/3+JeF0+lUbm6uUlNTZbfbq1dwduU1emTsbu+WDwI+6TM8Qq+tUVhYqHr16vn9j1FLc87b7DqdMMi13+LY8x96bY2QyLmNo2T39ivDwjC/PMWx5z/02hqe5lzIX15+zz336P3339eKFStOO+CWJIfDIYfDUW663W6v8s5ZnWVcvA33MDqQvOozqoRe+1agemlpznmbXaffmHXrruE49vyHXvtWSORc2VHvB93sU2fEsec/9Nq3PO1lyA66jTG65557NG/ePC1fvlwtWrQIdEkAAAAAgDATsoPukSNHKicnR//6178UHx+vffv2SZISExMVExMT4OoAAAAAAOEgZL+ne+rUqSooKFCfPn3U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jBkaPny4/wsCwgg55x/kHBBYZJ31yDmEG76nGwAAAAAAi/CZbgAAAAAALMKgGwAAAAAAizDoBgAAAADAIgy6AQAAAACwCINuAAAAAAAswqAbAAAAAACLMOgGAAAAAMAiDLoBAAAAALAIg26EreXLl8tms+nQoUM+X3efPn00evRon68XAKqCnAMQ6sg5BINagS4ACEVz586V3W4PdBmVyszM1Pz585WXl+eT9Q0fPlyHDh3S/PnzfbI+ADUfOQcg1JFz8BUG3YAF6tatG+gS/KK0tFQ2my3QZQAIAHIOQKgj5+ArXF4On3jvvffUrl07xcTEKCkpSf3791dRUZHr+RkzZqhNmzaKjo5W69at9fLLL7stv3v3bt14442qW7eu4uLi1KVLF61Zs8b1/NSpU3XuuecqKipKrVq10ptvvum2vM1m06uvvqohQ4YoNjZW559/vt5//323eRYtWqSWLVsqJiZGffv21fbt292e37Fjh9LT01WnTh3FxcWpbdu2WrRoUaWv+eWXX9b555+v6OhoNWzYUNdee63rud9ejtS8eXM9+eSTuuWWWxQfH6+mTZtq+vTpVerBggULdNFFFyk6OlrnnHOOsrKydPz48UrrW758uS655BLFxcXprLPOUo8ePbRjxw7NnDlTWVlZ+uqrr2Sz2WSz2TRz5kxJ0nPPPad27dopLi5OKSkpuuuuu3TkyBHXOmfOnKmzzjpLCxcu1AUXXCCHw6ERI0bo9ddf17/+9S/X+pYvX15pXUCwIufIOXIOoY6cI+fIOYsYwEt79uwxtWrVMs8995zZtm2b+frrr81LL71kDh8+bIwxZvr06aZx48Zmzpw5ZuvWrWbOnDmmbt26ZubMmcYYYw4fPmzOOecc07NnT7Ny5Urzww8/mNmzZ5vVq1cbY4yZO3eusdvt5qWXXjKbNm0yzz77rImMjDRLly511SDJNGnSxOTk5JgffvjBjBo1ytSuXdscOHDAGGPMzp07jcPhMPfee6/57rvvzFtvvWUaNmxoJJmDBw8aY4wZNGiQSU1NNV9//bXZsmWLWbBggfn0008rfM1r1641kZGRJicnx2zfvt2sX7/evPDCC67ne/fube69917X42bNmpm6deual156yfzwww8mOzvbREREmG+//dajHnz00UcmISHBzJw502zZssUsWbLENG/e3GRmZlZYn9PpNImJiea+++4zmzdvNv/973/NzJkzzY4dO0xxcbH561//atq2bWv27t1r9u7da4qLi40xxjz//PNm6dKlZuvWreaTTz4xrVq1Mn/+859d650xY4ax2+2me/fu5t///rf57rvvzKFDh8z1119vfve737nWV1JS4tnOAwQJco6cI+cQ6sg5co6csw6Dbnjtyy+/NJLM9u3bK3w+JSXF5OTkuE17/PHHTbdu3YwxxvzjH/8w8fHxrkD9re7du5vbb7/dbdp1111nrrjiCtdjSWbcuHGux0eOHDE2m818+OGHxhhjxo4da9q0aWPKyspc8zz44INuId2uXbtKQ++35syZYxISEkxhYWGFz1cU0n/84x9dj8vKykyDBg3M1KlTjTFn7kHPnj3Nk08+6TbtzTffNI0bN65w/gMHDhhJZvny5RU+P2HCBNOhQ4fKXp7Lu+++a5KSklyPZ8yYYSSZvLw8t/mGDRtmrr766jOuDwhW5Fx55BwQWsi58sg5+AqXl8NrHTp0UL9+/dSuXTtdd911euWVV3Tw4EFJ0s8//6xdu3bp1ltvVe3atV0/EydO1JYtWyRJeXl56tSpU6Wfm/n222/Vo0cPt2k9evTQt99+6zatffv2rv+Pi4tTfHy8fvrpJ9c6unbt6vZ5lW7durktP2rUKE2cOFE9evTQhAkT9PXXX1f6mlNTU9WsWTOdc845Gjp0qN5++20VFxeftk+n1mez2dSoUSNXfWfqwZdffqnHHnvMrYe333679u7dW+F269atq+HDh2vgwIFKT0/XCy+8oL179562PklatmyZUlNTdfbZZys+Pl4333yzDhw44HZpWVRUlNtrAcIBOUfOAaGOnCPnYB0G3fBaZGSkcnNz9eGHH+qCCy7Qiy++qFatWmnbtm0qKyuTJL3yyivKy8tz/XzzzTf6/PPPJUkxMTFn3MZvb+5gjCk37bd3l7TZbK7tG2POuI3bbrtNW7du1dChQ7Vx40Z16dJFL774YoXzxsfHa/369Zo1a5YaN26s8ePHq0OHDqf9uorT1XemHpSVlSkrK8uthxs3btQPP/yg6OjoCpeZMWOGPvvsM3Xv3l2zZ89Wy5YtXT2vyI4dO3TFFVfowgsv1Jw5c/Tll1/qpZdekiQ5nU7XfDExMdxsA2GHnCPngFBHzpFzsA6DbviEzWZTjx49lJWVpQ0bNigqKkrz5s1Tw4YNdfbZZ2vr1q0677zz3H5atGgh6cQ7hnl5efrll18qXHebNm20atUqt2mrV69WmzZtPK7vggsuKBdQFQVWSkqK7rzzTs2dO1d//etf9corr1S6zlq1aql///6aNGmSvv76a23fvl1Lly71uKZTnakHnTt31qZNm8r18LzzzlNEROWHcadOnTR27FitXr1aF154oXJyciSdeHeztLTUbd5169bp+PHjevbZZ9W1a1e1bNlSe/bs8aj+itYHhBpyjpwj5xDqyDlyjpyzBl8ZBq+tWbNGn3zyiQYMGKAGDRpozZo1+vnnn10hmpmZqVGjRikhIUFpaWkqKSnRunXrdPDgQY0ZM0Y33XSTnnzySQ0ePFjZ2dlq3LixNmzYoOTkZHXr1k3333+/rr/+enXu3Fn9+vXTggULNHfuXH388cce13jnnXfq2Wef1ZgxY3THHXfoyy+/dN3h8aTRo0crLS1NLVu21MGDB7V06dJKfxEsXLhQW7duVa9evVSnTh0tWrRIZWVlatWqVbV6eKYejB8/XldeeaVSUlJ03XXXKSIiQl9//bU2btyoiRMnllvftm3bNH36dF111VVKTk7Wpk2b9P333+vmm2+WdOLum9u2bVNeXp6aNGmi+Ph4nXvuuTp+/LhefPFFpaen69///remTZvmUf3NmzfX4sWLtWnTJiUlJSkxMbFGf68lUFXkHDlHziHUkXPkHDlnoUB+oByh4b///a8ZOHCgqV+/vnE4HKZly5bmxRdfdJvn7bffNh07djRRUVGmTp06plevXmbu3Lmu57dv325+//vfm4SEBBMbG2u6dOli1qxZ43r+5ZdfNuecc46x2+2mZcuW5o033nBbvyQzb948t2mJiYlmxowZrscLFiww5513nnE4HKZnz57mtddec7vxxt13323OPfdc43A4TP369c3QoUNNfn5+ha955cqVpnfv3qZOnTomJibGtG/f3syePdv1fEU33nj++efd1tGhQwczYcIEj3vw0Ucfme7du5uYmBiTkJBgLrnkEjN9+vQK69u3b58ZPHiwady4sYmKijLNmjUz48ePN6WlpcYYY44ePWp+//vfm7POOstIcvXpueeeM40bNzYxMTFm4MCB5o033nDr0YwZM0xiYmK57f30008mNTXV1K5d20gyy5Ytq7AuIFiRc+QcOYdQR86Rc+ScdWzGePDhCAAAAAAAUGV8phsAAAAAAIsw6AYAAAAAwCIMugEAAAAAsAiDbgAAAAAALMKgGwAAAAAAizDoBgAAAADAIgy6AQAAAACwCINuAAAAAAAswqAbAAAAAACLMOgGAAAAAMAiDLoBAAAAALAIg24AAAAAACzy/wDO1MWh6r3w6AAAAABJRU5ErkJggg==\n", | |
| "text/plain": [ | |
| "<Figure size 1000x400 with 3 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, axes = plot_all(sync_save_text_times, threads_save_text_times, processes_save_text_times,\n", | |
| " title='Saving text data', figsize=(10,4))\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 31, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "sync_load_text_times = process(load_text_data, args=(None,), n=n, scheduler=None)\n", | |
| "threads_load_text_times = process(load_text_data, args=(None,), n=n, scheduler=thread_client)\n", | |
| "processes_load_text_times = process(load_text_data, args=(None,), n=n, scheduler=process_client)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 32, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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cotuuOEGPfDAA0pJSVGjRo107733eg3O9u3bp5YtW1ZZXmpqqs9xJScnV5nmcrn0yy+/HHM91U2ri++//17GmBqXc8IJJ3g97tChgwYMGKB33nlHN954Y7Xbsi727dundu3aVZn+2+1XWVmpIUOGaNeuXbr33nvVrVs3xcfHq7KyUn369PHaVjU5cOCABgwYoJiYGE2cOFEdO3ZUXFycduzYoYsvvtinZQAAECwMugEAltO0aVNFRUVp9+7dVZ7btWuXJHmOJL/yyivKzMzUs88+69Xutxf4Sk5O1ieffFJledVdSK0hkpOT9f333/t9PSkpKXI4HFq2bJlcLleV53877fnnn9c777yj0047TZMnT9bll1+u008/vd7rT05OrjaH3077/PPP9dlnn2nGjBkaMWKEZ/q3337r87oWLlyoXbt2afHixZ6j25K4tRgAICxxejkAwHLi4+N1+umna9asWV5HNSsrK/XKK6+odevW6tixo6QjV/n+7YBz/fr1Ve6zPWjQIO3fv19vv/221/SCggK/xj5w4EAtXLjQ60rdlZWV+te//uXT/Edz+e3R3PPPP1/GGH333Xc65ZRTqvx169bN03bDhg0aM2aMrrrqKi1btkzdu3fX5Zdfrp9++umY66nJoEGD9MUXX+izzz7zmv7b7Xf0qu+/7ZN//OMfPudal2UAABBqHOkGAISthQsXVnsLrXPPPVeTJk1SVlaWBg0apFtvvVXR0dGaMmWKPv/8c82cOdMzMDv//PP1wAMPaMKECRo4cKA2btyo+++/X+3atdPhw4c9y7zqqqv0xBNP6KqrrtKDDz6oE088UfPnz9eCBQv8mtPdd9+tuXPnavDgwbr77rsVGxurqVOnem51FRVV+/fhRwfPjzzyiLKzs9WoUSN1795d/fv31x//+EeNGjVKq1ev1plnnqn4+Hjt3r1by5cvV7du3XTjjTeqtLRUl112mdq1a6cpU6YoOjpab7zxhnr37q1Ro0Zpzpw5kqSEhARlZGTo3//+twYPHqxmzZopJSVFbdu2rTausWPH6sUXX9R5552niRMneq5e/tVXX3m169y5s9q3b68777xTxhg1a9ZMc+fOVWFhYY25PvXUUxoxYoScTqc6deqkfv36qWnTprrhhhs0YcIEOZ1Ovfrqq1UG/AAAhIWQXsYNAIBqHL16eU1/R69mvWzZMnPWWWeZ+Ph4Exsba/r06WPmzp3rtazy8nJz6623muOPP97ExMSY3r17mzlz5pgRI0aYjIwMr7Y7d+40l1xyiWnSpIlJSEgwl1xyiVmxYoXPVy8/77zzquQycOBAM3DgQK9py5YtM6effrpxuVwmNTXV3HbbbeaRRx4xkszPP/9c67YpLy831157rWnevLlxOBxVru794osvmtNPP92zTdq3b2+uuuoqs3r1amOMMX/4wx9MXFyc+eKLL7yW+69//ctIMk888YRn2gcffGB69eplXC6XkWRGjBhRa2z//e9/TVZWlomJiTHNmjUz11xzjfn3v/9d5erlR9slJCSYpk2bmuHDh5vt27dXe7X08ePHm7S0NBMVFeW1nBUrVpi+ffuauLg407x5c3PttdeaNWvWVOkrAABCzWGMMUEf6QMAAC9DhgzR1q1b9fXXX4c6FAAA4EecXg4AQJCNGzdOvXr1Unp6un788Ue9+uqrKiws1AsvvBDq0AAAgJ8x6AYAIMgqKip03333ac+ePXI4HDr55JP1z3/+U3/4wx9CHRoAAPAzTi8HAAAAACBAuGUYAAAAAAABwqAbAAAAAIAAYdANAAAAAECAMOgGAAAAACBAGHQDAAAAABAgDLoBAAAAAAgQBt0AAAAAAAQIg24AAAAAAAKEQTcAAAAAAAHCoBsAAAAAgABh0A0AAAAAQIAw6AYAAAAAIEAYdAMAAAAAECAMugEAAAAACBAG3QAAAAAABAiDbgAAAAAAAoRBNwAAAAAAAcKgGwAAAACAAGHQDQAAAABAgDDoBgAAAAAgQBh0AwAAAAAQIAy6AQAAAAAIEAbdAAAAAAAECINuAAAAAAAChEE3AAAAAAABwqAbAAAAAIAAYdANAAAAAECAMOgGAAAAACBAGHQDAAAAABAgDLoBSTNmzJDD4dDq1atDHQoA1MjhcPj0t3jxYi1evFgOh0NvvvlmqMP2SWZmpjIzM0MdBoAgOfrZ6+hf48aN1bp1a40aNUrfffddqMMD/KpxqAMAAAC++eijj7weP/DAA1q0aJEWLlzoNf3kk0/WmjVrghkaANTL9OnT1blzZ/3yyy9aunSpJk2apCVLlmjDhg2Kj48PdXiAXzDoBgDAIvr06eP1uHnz5oqKiqoy3R/KysoUFxfn9+UCwK917dpVp5xyiiRp0KBBqqio0AMPPKA5c+bo97//fZX21CZYEaeXAz5avny5Bg8erISEBMXFxalfv3565513qrT7/PPPdeGFF6pp06aKiYlRz5499dJLL3m1OXra5yuvvKJx48YpNTVVsbGxGjhwoNauXRuslABEALfbrbvvvltpaWlKTEzU2WefrY0bN3q1yczMVNeuXbV06VL169dPcXFxuvrqqyVJJSUluvXWW9WuXTtFR0fr+OOP19ixY1VaWuq1jGeeeUZnnnmmWrRoofj4eHXr1k2PPvqo3G63VztjjB599FFlZGQoJiZGvXv31rvvvlsl7srKSk2cOFGdOnVSbGysjjvuOHXv3l1PPfWUn7cQgHBy9EvEbdu2aeTIkWrSpIk2bNigIUOGKCEhQYMHD5Yk/fjjj7rpppt0/PHHKzo6WieccILuvvtulZeXey2vsrJSTz/9tHr27OmpJX369NHbb7/t1e71119X3759FR8fryZNmmjo0KFVPpNt3rxZV1xxhdLS0uRyudSyZUsNHjxY69at87RZuHChMjMzlZycrNjYWLVp00aXXHKJysrKPG0OHTqkiRMnqnPnznK5XGrevLlGjRqlH374wWt9viwL1sCRbsAHS5YsUVZWlrp3764XXnhBLpdLU6ZMUU5OjmbOnKnLL79ckrRx40b169dPLVq00N///nclJyfrlVde0ciRI/X999/r9ttv91ruXXfdpd69e+v5559XcXGx8vLylJmZqbVr1+qEE04IRaoAbOauu+5S//799fzzz6ukpER33HGHcnJy9OWXX6pRo0aedrt379Yf/vAH3X777XrooYcUFRWlsrIyDRw4UDt37tRdd92l7t2764svvtB9992nDRs26IMPPpDD4ZAkbdq0Sbm5uZ7B+WeffaYHH3xQX331lV588UXPevLz85Wfn69rrrlGl156qXbs2KHrrrtOFRUV6tSpk6fdo48+qry8PN1zzz0688wz5Xa79dVXX+nnn38O2rYDEHzffvutpCNn8nz99dc6dOiQLrjgAl1//fW68847dfjwYR08eFCDBg3Spk2blJ+fr+7du2vZsmWaNGmS1q1b53VQZOTIkXrllVd0zTXX6P7771d0dLTWrFmjrVu3eto89NBDuueeezRq1Cjdc889OnTokP76179qwIAB+uSTT3TyySdLks4991xVVFTo0UcfVZs2bVRUVKQVK1Z46tLWrVt13nnn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d1dlZaW2b9+u999/X7fccotOP/10ZWVlKTo6Wr/73e90++236+DBg3r22Wf1008/eS2vadOmuvXWWzVx4kRde+21Gj58uHbs2KG8vLwqp3/m5OR47t/bvHlzbdu2TU8++aQyMjJ04oknBnMzAAgzV111lZ555hmNGDFCW7duVbdu3bR8+XI99NBDOvfcc3X22WdLOnKk+Morr9TEiRP1/fff6/zzz5fL5dLatWsVFxenP/3pT2rbtq3uv/9+3X333dq8ebPOOeccNW3aVN9//70++eQTxcfHKz8/X+vXr9fNN9+s4cOH68QTT1R0dLQWLlyo9evX684775QkTZ06VQsXLtR5552nNm3a6ODBg54zhY7GdMUVV+jVV1/Vueeeqz//+c867bTT5HQ6tXPnTi1atEgXXnihLrroIp+WBQsJ6WXcgDBx9AqaNf1t2bLFLFu2zJx11lkmPj7exMbGmj59+pi5c+dWWdaGDRtMTk6OSUpKMtHR0aZHjx5m+vTpXm2OXlX4n//8pxkzZoxp3ry5cblcZsCAAWb16tVByhqA1fly9fJ//etfXtO3bNliJHnVpYEDB5ouXbpUu5wDBw6Ye+65x3Tq1MlER0ebpKQk061bN/OXv/zF7Nmzx9Nu7ty5pkePHiYmJsYcf/zx5rbbbjPvvvuukWQWLVrkaVdZWWkmTZpk0tPTTXR0tOnevbuZO3euGThwoNfVyx977DHTr18/k5KSYqKjo02bNm3MNddcY7Zu3Vr3DQUg7BzrzjHG1F7j9u3bZ2644QbTqlUr07hxY5ORkWHGjx9vDh486NWuoqLCPPHEE6Zr166eGta3b98qn+HmzJljBg0aZBITE43L5TIZGRnm0ksvNR988IExxpjvv//ejBw50nTu3NnEx8ebJk2amO7du5snnnjCHD582BhjzEcffWQuuugik5GRYVwul0lOTjYDBw40b7/9tte63G63+dvf/uapmU2aNDGdO3c2119/vfnmm2/qtCxYg8OYX53bCiAoFi9erEGDBulf//pXlStvAgAAALAPftMNAAAAAECAMOgGAAAAACBAOL0cAAAAAIAA4Ug3AAAAAAABwqAbAAAAAIAAYdANAAAAAECANA51AOGssrJSu3btUkJCghwOR6jDAWAjxhjt379faWlpiooK3fef1DkAgUKdA2B3vtY5Bt212LVrl9LT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9QthZAAQPOFSkwEgUKhzAKygzoPu0aNHVzu9tLS0xquJB8KBAwe0bt06rVu3TtKRi6etW7dO27dvl8Ph0NixY/XQQw9p9uzZ+vzzzzVy5EjFxcUpNzc3aDECQKCFS00GgEChzgGwujoPut9//33dc889XtNKS0t1zjnnqKKiwm+BHcvq1avVq1cv9erVS5I0btw49erVS/fdd58k6fbbb9fYsWN100036ZRTTtF3332n999/XwkJCUGLEQACLVxqMgAECnUOgNXV+Tfd77//vs444wwlJyfrL3/5i/bv36+hQ4eqcePGevfddwMRY7UyMzNV2zXgHA6H8vLylJeXF7SYACDYwqUmA0CgUOcAWF2dB93t2rXTggULlJmZqaioKL322mtyuVx65513FB8fH4gYAQA1oCYDsDvqHACrq9fVy7t27ap58+bp7LPP1umnn6558+YpNjbW37EBkSGvONQRwOKoyQgroaxpbrc0f/6R23VZ5Mq38A11zgd1ee39+rUCIOB8GnT36tVLDoejynSXy6Vdu3apf//+nmlr1qzxX3QAgCqoyQDsjjoHwE58GnQPGzYswGEAFpeX1IB5OdKNuqEmo8EmtQ6L+2n7XVSM1GNa9flRay0loutcQz5TSOzrQBjyadA9YcKEQMcBAPARNRmA3VHnANhJnW8ZtmPHDu3c+f9///HJJ59o7NixmjZtml8D84f9+/dr7NixysjIUGxsrPr166dVq1aFOiwA8Bsr1WQAqA/qHACrq/OgOzc3V4sWLZIk7dmzR2effbY++eQT3XXXXbr//vv9HmBDXHvttSosLNQ///lPbdiwQUOGDNHZZ5+t7777LtShAYBfWKkmA0B9UOcAWF2dB92ff/65TjvtNEnSG2+8oW7dumnFihUqKCjQjBkz/B1fvf3yyy9666239Oijj+rMM89Uhw4dlJeXp3bt2unZZ58NdXgA4BdWqckAUF/UOQBWV+dBt9vtlsvlkiR98MEHuuCCCyRJnTt31u7du/0bXQMcPnxYFRUViomJ8ZoeGxur5cuXhygqAPAvq9RkAKgv6hwAq6vzfbq7dOmiqVOn6rzzzlNhYaEeeOABSdKuXbuUnJzs9wDrKyEhQX379tUDDzygk046SS1bttTMmTO1cuVKnXjiidXOU15ervLycs/jkpISSUeKvdvt9mm9R9v52t5K7Jyb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2B11Dv7CoBsIgGbNmoU6hKCoqKiQw+EIdRgAQoA6B8DuqHPwF04vh1+8+eab6tatm2JjY5WcnKyzzz5bpaWlnuenT5+uk046STExMercubOmTJniNf/OnTt1xRVXqFmzZoqPj9cpp5yilStXep5/9tln1b59e0VHR6tTp0765z//6TW/w+HQ888/r4suukhxcXE68cQT9fbbb3u1mT9/vjp27KjY2FgNGjRIW7du9Xp+27ZtysnJUdOmTRUfH68uXbpo/vz5NeY8ZcoUnXjiiYqJiVHLli116aWXep777elIbdu21UMPPaSrr75aCQkJatOmjaZNm1anbTB37lz93//9n2JiYnTCCScoPz9fhw8frjG+xYsX67TTTlN8fLyOO+449e/fX9u2bdOMGTOUn5+vzz77TA6HQw6HQzNmzJAkPf744+rWrZvi4+OVnp6um266SQcOHPAsc8aMGTruuOM0b948nXzyyXK5XBo1apReeukl/fvf//Ysb/HixTXGBVgVdY46R52D3VHnqHPUuQAxQAPt2rXLNG7c2Dz++ONmy5YtZv369eaZZ54x+/fvN8YYM23aNNOqVSvz1ltvmc2bN5u33nrLNGvWzMyYMcMYY8z+/fvNCSecYAYMGGCWLVtmvvnmG/P666+bFStWGGOMmTVrlnE6neaZZ54xGzduNI899php1KiRWbhwoScGSaZ169amoKDAfPPNN2bMmDGmSZMmZt++fcYYY7Zv325cLpf585//bL766ivzyiuvmJYtWxpJ5qeffjLGGHPeeeeZrKwss379erNp0yYzd+5cs2TJkmpzXrVqlWnUqJEpKCgwW7duNWvWrDFPPfWU5/mBAweaP//5z57HGRkZplmzZuaZZ54x33zzjZk0aZKJiooyX375pU/b4L333jOJiYlmxowZZtOmTeb99983bdu2NXl5edXG53a7TVJSkrn11lvNt99+a/773/+aGTNmmG3btpmysjJzyy23mC5dupjdu3eb3bt3m7KyMmOMMU888YRZuHCh2bx5s/nwww9Np06dzI033uhZ7vTp043T6TT9+vUz//nPf8xXX31lfv75Z3PZZZeZc845x7O88vJy33YewCKoc9Q56hzsjjpHnaPOBQ6DbjTYp59+aiSZrVu3Vvt8enq6KSgo8Jr2wAMPmL59+xpjjPnHP/5hEhISPAX1t/r162euu+46r2nDhw835557ruexJHPPPfd4Hh84cMA4HA7z7rvvGmOMGT9+vDnppJNMZWWlp80dd9zhVaS7detWY9H7rbfeesskJiaakpKSap+vrkj/4Q9/8DyurKw0LVq0MM8++6wx5tjbYMCAAeahhx7ymvbPf/7TtGrVqtr2+/btM5LM4sWLq31+woQJpkePHjWl5/HGG2+Y5ORkz+Pp06cbSWbdunVe7UaMGGEuvPDCYy4PsCrqXFXUOcBeqHNVUefgL5xejgbr0aOHBg8erG7dumn48OF67rnn9NNPP0mSfvjhB+3YsUPXXHONmjRp4vmbOHGiNm3aJElat26devXqVePvZr788kv179/fa1r//v315Zdfek3r3r275//x8fFKSEjQ3r17Pcvo06eP1+9V+vbt6zX/mDFjNHHiRPXv318TJkzQ+vXra8w5KytLGRkZOuGEE3TllVfq1VdfVVlZWa3b6dfxORwOpaameuI71jb49NNPdf/993ttw+uuu067d++udr3NmjXTyJEjNXToUOXk5Oipp57S7t27a41PkhYtWqSsrCwdf/zxSkhI0FVXXaV9+/Z5nVoWHR3tlQsQCahz1DnA7qhz1DkEDoNuNFijRo1UWFiod999VyeffLKefvppderUSVu2bFFlZaUk6bnnntO6des8f59//rk+/vhjSVJsbOwx1/HbizsYY6pM++3VJR0Oh2f9xphjruPaa6/V5s2bdeWVV2rDhg065ZRT9PTTT1fbNiEhQWvWrNHMmTPVqlUr3XffferRo0ett6uoLb5jbYPKykrl5+d7bcMNGzbom2++UUxMTLXzTJ8+XR999JH69eun119/XR07dvRs8+ps27ZN5557rrp27aq33npLn376qZ555hlJktvt9rSLjY3lYhuIONQ56hxgd9Q56hwCh0E3/MLhcKh///7Kz8/X2rVrFR0drdmzZ6tly5Y6/vjjtXnzZnXo0MHrr127dpKOfGO4bt06/fjjj9Uu+6STTtLy5cu9pq1YsUInnXSSz/GdfPLJVQpUdQUrPT1dN9xwg2bNmqVbbrlFzz33XI3LbNy4sc4++2w9+uijWr9+vbZu3aqFCxf6HNOvHWsb9O7dWxs3bqyyDTt06KCoqJpfxr169dL48eO1YsUKde3aVQUFBZKOfLtZUVHh1Xb16tU6fPiwHnvsMfXp00cdO3bUrl27fIq/uuUBdkOdo85R52B31DnqHHUuMLhlGBps5cqV+vDDDzVkyBC1aNFCK1eu1A8//OAponl5eRozZowSExOVnZ2t8vJyrV69Wj/99JPGjRun3/3ud3rooYc0bNgwTZo0Sa1atdLatWuVlpamvn376rbbbtNll12m3r17a/DgwZo7d65mzZqlDz74wOcYb7jhBj322GMaN26crr/+en366aeeKzweNXbsWGVnZ6tjx4766aeftHDhwhrfCObNm6fNmzfrzDPPVNOmTTV//nxVVlaqU6dO9dqGx9oG9913n84//3ylp6dr+PDhioqK0vr167VhwwZNnDixyvK2bNmiadOm6YILLlBaWpo2btyor7/+WldddZWkI1ff3LJli9atW6fWrVsrISFB7du31+HDh/X0008rJydH//nPfzR16lSf4m/btq0WLFigjRs3Kjk5WUlJSWF9X0ugrqhz1DnqHOyOOkedo84FUCh/UA57+O9//2uGDh1qmjdvblwul+nYsaN5+umnvdq8+uqrpmfPniY6Oto0bdrUnHnmmWbWrFme57du3WouueQSk5iYaOLi4swpp5xiVq5c6Xl+ypQp5oQTTjBOp9N07NjRvPzyy17Ll2Rmz57tNS0pKclMnz7d83ju3LmmQ4cOxuVymQEDBpgXX3zR68IbN998s2nfvr1xuVymefPm5sorrzRFRUXV5rxs2TIzcOBA07RpUxMbG2u6d+9uXn/9dc/z1V1444knnvBaRo8ePcyECRN83gbvvfee6devn4mNjTWJiYnmtNNOM9OmTas2vj179phhw4aZVq1amejoaJORkWHuu+8+U1FRYYwx5uDBg+aSSy4xxx13nJHk2U6PP/64adWqlYmNjTVDhw41L7/8stc2mj59uklKSqqyvr1795qsrCzTpEkTI8ksWrSo2rgAq6LOUeeoc7A76hx1jjoXOA5jfPhxBAAAAAAAqDN+0w0AAAAAQIAw6AYAAAAAIEAYdAMAAAAAECAMugEAAAAACBAG3QAAAAAABAiDbgAAAAAAAoRBNwAAAAAAAcKgGwAAAACAAGHQDQAAAABAgDDoBgAAAAAgQBh0AwAAAAAQIAy6AQAAAAAIkP8Hlg5TnLPWUqEAAAAASUVORK5CYII=\n", | |
| "text/plain": [ | |
| "<Figure size 1000x400 with 3 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, axes = plot_all(sync_load_text_times, threads_load_text_times, processes_load_text_times,\n", | |
| " title='Loading text data', figsize=(10,4))\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 33, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "x is 80.00MB\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "from sys import getsizeof\n", | |
| "x = np.random.normal(0,1, (10_000, 1000))\n", | |
| "print(f\"x is {getsizeof(x)*1e-6:.2f}MB\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 36, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "sync_transfer_return_times = process(transfer_data, args=(x,), n=n, scheduler=None)\n", | |
| "threads_transfer_return_times = process(transfer_data, args=(x,), n=n, scheduler=thread_client)\n", | |
| "processes_transfer_return_times = process(transfer_data, args=(x,), n=n, scheduler=process_client)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 37, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAGVCAYAAADjWpKuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAA9hAAAPYQGoP6dpAABpA0lEQVR4nO3deXRTdf7/8VcKabrQFmhlqZRFlEV2B5RFBAYKU7AKKi5VBFxGRxQRRQQRWkUZcXRwRHFwFNzqMiOg4IJVQHTcQEBxVJQdBMQitNBKCe3n9wc/8jV24bY0ub3J83FOj96bT27eeTW8bz65tzcuY4wRAAAAAACodhF2FwAAAAAAQKhi0g0AAAAAQIAw6QYAAAAAIECYdAMAAAAAECBMugEAAAAACBAm3QAAAAAABAiTbgAAAAAAAoRJNwAAAAAAAcKkGwAAAACAAGHSDQA2cblcln5WrFhhd6l+3n//fXXt2lWxsbFyuVxatGhR0GvYunWrXC6X5s+fX+n7fvPNN8rMzNTWrVurtaZdu3YpMzNT69atq9btBlNmZqZcLpelsVOmTFHTpk1Vu3Zt1a1bN7CFVYOaVG92drZmzZpV5m0ul0uZmZlBrQcAEFi17S4AAMLVJ5984rd83333afny5Vq2bJnf+jPPPDOYZVXIGKNLL71UrVq10htvvKHY2Fi1bt3a7rIq5ZtvvlFWVpb69u2r5s2bV9t2d+3apaysLDVv3lydO3eutu3WRK+//rruv/9+3X333UpLS5PH47G7pArVtHqzs7P19ddfa9y4caVu++STT9SkSZPgFwUACBgm3QBgk+7du/stn3LKKYqIiCi1/vcKCwsVExMTyNLKtWvXLv3yyy8aNmyY+vfvXy3b9Hq9crlcql2bXZJTfP3115KksWPHqkGDBhWO/fXXXxUdHR2MsspVmXrtdqJ//wAA5+H0cgCowfr27av27dtr5cqV6tmzp2JiYnTNNddIkl555RUNHDhQjRs3VnR0tNq2bau77rpLBQUFftsYNWqU6tSpo40bN2rw4MGqU6eOUlJSdPvtt6uoqMhv7Jw5c9SpUyfVqVNHcXFxatOmjSZPnizp2KnHx4/ATZw4US6Xy+9I8Q8//KCMjAw1aNBAHo9Hbdu21eOPP+63/RUrVsjlcun555/X7bffrlNPPVUej0cbN24sN4Ndu3bp0ksvVVxcnBISEnTZZZdpz549pcatXr1al19+uZo3b67o6Gg1b95cV1xxhbZt2+YbM3/+fA0fPlyS1K9fP98p/MdPU8/JydGFF16oJk2aKCoqSqeffrpuuOEG5ebmVvRr0ooVK9StWzdJ0ujRo33b/e1pwm+88YZ69OihmJgYxcXFKTU1tdTZDmU5fPiwbr/9dnXu3FkJCQmqX7++evTooddff73UWJfLpZtvvlnPP/+82rZtq5iYGHXq1ElLliwpNfbNN99U586d5fF41KJFC/3tb387YS2S1Lx5c02ZMkWS1LBhQ7/n2bx5c51//vlasGCBunTpoqioKGVlZUk6NvG98MILVa9ePUVFRalz58569tlnS+XocrmUnZ2tiRMnqnHjxqpTp47S09P1008/6eDBg/rzn/+spKQkJSUlafTo0Tp06FCV6y3vVO7mzZtr1KhRvuX58+fL5XJp+fLl+stf/qKkpCQlJibqoosu0q5du0rdPzs7Wz169FCdOnVUp04dde7cWU8//bSkY/+m33zzTW3bts3vz0iOK6umymT30ksv6e6771ZycrLi4+M1YMAAbdiwocKMAACBxWEFAKjhdu/erauuukp33nmnHnjgAUVEHPu89IcfftDgwYM1btw4xcbG6rvvvtODDz6ozz//vNQp6l6vVxdccIGuvfZa3X777Vq5cqXuu+8+JSQkaOrUqZKkl19+WTfddJNuueUW/e1vf1NERIQ2btyob775RpJ03XXXqVOnTrrooot0yy23KCMjw3ea7jfffKOePXuqadOmevjhh9WoUSMtXbpUY8eOVW5urqZNm+ZXz6RJk9SjRw89+eSTioiIKPfo46+//qoBAwZo165dmjFjhlq1aqU333xTl112WamxW7duVevWrXX55Zerfv362r17t+bMmaNu3brpm2++UVJSkoYMGaIHHnhAkydP1uOPP66zzjpLktSyZUtJ0qZNm9SjRw9dd911SkhI0NatW/XII4/o3HPP1fr16+V2u8us86yzztK8efM0evRoTZkyRUOGDJEk34cU2dnZuvLKKzVw4EC99NJLKioq0syZM9W3b1+9//77Ovfcc8v9/RcVFemXX37RHXfcoVNPPVVHjhzRe++9p4suukjz5s3T1Vdf7Tf+zTff1KpVq3TvvfeqTp06mjlzpoYNG6YNGzbotNNOk3Ts7/IvvPBC9ejR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7bXXfFc0L4/L5VJkZKTfZHbPnj1lXr3citjYWJ199tlasGCB35kOBw8e1OLFi6u0zRPp37+/74Oi33ruuecUExNj29dkNW/eXF999ZXfumXLllX5dPWBAweqVq1amjNnToXjfnvmwYnU1OwAANZxpBsAHKhnz56qV6+ebrzxRk2bNk1ut1svvviivvzyyypv8/rrr1d0dLR69eqlxo0ba8+ePZoxY4YSEhJ8X4dVnkcffVTnnnuuevfurb/85S9q3ry5Dh48qI0bN2rx4sWlrqZu1dVXX62///3vuvrqq3X//ffrjDPO0FtvvaWlS5f6jYuPj9d5552nhx56SElJSWrevLk++OADPf3006pbt67f2Pbt20uS5s6dq7i4OEVFRalFixZq06aNWrZsqbvuukvGGNWvX1+LFy9WTk6OpVpbtmyp6Ohovfjii2rbtq3q1Kmj5ORkJScna+bMmbryyit1/vnn64YbblBRUZEeeughHThwQH/9618r3O7xr+C66aabdMkll2jHjh2677771LhxY/3www/Ww/yN++67T3/605+Umpqq22+/XcXFxXrwwQcVGxtr+cyAypg2bZqWLFmifv36aerUqapfv75efPFFvfnmm5o5c6YSEhKq/TGtGDFihO655x5NnTpVffr00TfffKPZs2dXuZ7mzZtr8uTJuu+++/Trr7/qiiuuUEJCgr755hvl5ub6vj6tQ4cOWrBggebMmaM//OEPioiIUNeuXcvcZk3NDgBgHUe6AcCBEhMT9eabbyomJkZXXXWVrrnmGtWpU0evvPJKlbfZu3dvff3117r11luVmpqq2267Ta1atdKHH37oO222PGeeeabWrFmj9u3ba8qUKRo4cKCuvfZa/ec//1H//v2rXFNMTIyWLVumAQMG6K677tIll1yinTt36uWXXy41Njs7W/369dOdd96piy66SKtXr1ZOTk6pSUmLFi00a9Ysffnll+rbt6+6deumxYsXy+12a/HixWrVqpVuuOEGXXHFFdq7d6/ee+89y7U+88wz2rdvnwYOHKhu3bpp7ty5ko79vfmiRYu0b98+XXbZZRo9erTi4+O1fPnyCr8uTDp2yv9f//pXvf322xo8eLAefPBB3XXXXWVeTM6q1NRULVq0SPn5+brssss0fvx4XXzxxb7vgK9urVu31scff6zWrVtrzJgxGjp0qL7++mvNmzdPEyZMCMhjWjFhwgRNmDBB8+fPV3p6ul577TW9+uqrpT6oqYx7771Xzz33nLZt26Yrr7xSQ4cO1bx58/z+xOLWW2/VJZdcosmTJ6t79+4VfqhVU7MDAFjnMr891w0AAAAAAFQbjnQDAAAAABAgTLoBAAAAAAgQJt0AAAAAAAQIk24AAAAAAAKESTcAAAAAAAHCpBsAAAAAgABh0g0AAAAAQIAw6QYAAAAAIECYdAMAAAAAECBMugEAAAAACBAm3QAAAAAABAiTbgAAAAAAAoRJNwAAAAAAAcKkGwAAAACAAGHSDQAAAABAgDDpBgAAAAAgQJh0AwAAAAAQIEy6AQAAAAAIECbdAAAAAAAECJNuAAAAAAAChEk3AAAAAAABwqQbAAAAAIAAYdINAAAAAECAMOkGAAAAACBAmHQDAAAAABAgTLoBAAAAAAgQJt0AAAAAAAQIk24AAAAAAAKESTcAAAAAAAHCpBsAAAAAgABh0g0AAAAAQIAw6QYAAAAAIECYdAOS5s+fL5fLpdWrV9tdCgCUy+VyWfpZsWKFVqxYIZfLpf/85z92l21J37591bdvX7vLABAkx997Hf+pXbu2mjRpotGjR+vHH3+0uzygWtW2uwAAAGDNJ5984rd83333afny5Vq2bJnf+jPPPFNr1qwJZmkAUCXz5s1TmzZt9Ouvv2rlypWaMWOGPvjgA61fv16xsbF2lwdUCybdAAA4RPfu3f2WTznlFEVERJRaXx0KCwsVExNT7dsFgN9q3769unbtKknq16+fiouLdd9992nRokW68sorS42nN8GJOL0csOijjz5S//79FRcXp5iYGPXs2VNvvvlmqXFff/21LrzwQtWrV09RUVHq3Lmznn32Wb8xx0/7fOGFFzR+/Hg1atRI0dHR6tOnj9auXRuspwQgDHi9Xt19991KTk5WfHy8BgwYoA0bNviN6du3r9q3b6+VK1eqZ8+eiomJ0TXXXCNJys/P1x133KEWLVooMjJSp556qsaNG6eCggK/bTz++OM677zz1KBBA8XGxqpDhw6aOXOmvF6v3zhjjGbOnKlmzZopKipKZ511lt5+++1SdZeUlGj69Olq3bq1oqOjVbduXXXs2FGPPvpoNScEoCY5/iHitm3bNGrUKNWpU0fr16/XwIEDFRcXp/79+0uSfvnlF91000069dRTFRkZqdNOO0133323ioqK/LZXUlKixx57TJ07d/b1ku7du+uNN97wG/fKK6+oR48eio2NVZ06dTRo0KBS78k2b96syy+/XMnJyfJ4PGrYsKH69++vdevW+cYsW7ZMffv2VWJioqKjo9W0aVNdfPHFKiws9I05cuSIpk+frjZt2sjj8eiUU07R6NGj9fPPP/s9npVtwRk40g1Y8MEHHyg1NVUdO3bU008/LY/HoyeeeELp6el66aWXdNlll0mSNmzYoJ49e6pBgwb6xz/+ocTERL3wwgsaNWqUfvrpJ915551+2508ebLOOuss/etf/1JeXp4yMzPVt29frV27VqeddpodTxVAiJk8ebJ69eqlf/3rX8rPz9fEiROVnp6ub7/9VrVq1fKN2717t6666irdeeedeuCBBxQREaHCwkL16dNHO3fu1OTJk9WxY0f973//09SpU7V+/Xq99957crlckqRNmzYpIyPDNzn/8ssvdf/99+u7777TM88843ucrKwsZWVl6dprr9Ull1yiHTt26Prrr1dxcbFat27tGzdz5kxlZmZqypQpOu+88+T1evXdd9/pwIEDQcsOQPBt3LhR0rEzeb7//nsdOXJEF1xwgW644QbdddddOnr0qA4fPqx+/fpp06ZNysrKUseOHfXhhx9qxowZWrdund9BkVGjRumFF17Qtddeq3vvvVeRkZFas2aNtm7d6hvzwAMPaMqUKRo9erSmTJmiI0eO6KGHHlLv3r31+eef68wzz5QkDR48WMXFxZo5c6aaNm2q3Nxcffzxx76+tHXrVg0ZMkS9e/fWM888o7p16+rHH3/UO++8oyNHjigmJkYlJSW68MIL9eGHH+rOO+9Uz549tW3bNk2bNk19+/bV6tWrFR0dbWlbcBADwMybN89IMqtWrSrz9u7du5sGDRqYgwcP+tYdPXrUtG/f3jRp0sSUlJQYY4y5/PLLjcfjMdu3b/e7f1pamomJiTEHDhwwxhizfPlyI8mcddZZvvsaY8zWrVuN2+021113XXU/RQAhaOTIkSY2NrbM2473mcGDB/utf/XVV40k88knn/jW9enTx0gy77//vt/YGTNmmIiIiFK98T//+Y+RZN56660yH7u4uNh4vV7z3HPPmVq1aplffvnFGGPM/v37TVRUlBk2bJjf+P/+979GkunTp49v3fnnn286d+5ccQAAHOv4e69PP/3UeL1ec/DgQbNkyRJzyimnmLi4OLNnzx4zcuRII8k888wzfvd98sknjSTz6quv+q1/8MEHjSTz7rvvGmOMWblypZFk7r777nLr2L59u6ldu7a55ZZb/NYfPHjQNGrUyFx66aXGGGNyc3ONJDNr1qxyt3W8N65bt67cMS+99JKRZF577TW/9atWrTKSzBNPPGF5W3AOTi8HTqCgoECfffaZLrnkEtWpU8e3vlatWhoxYoR27tzpO1Vz2bJl6t+/v1JSUvy2MWrUKBUWFpa6CFJGRobvKJEkNWvWTD179tTy5csD+IwAhJMLLrjAb7ljx46Sjp26+Vv16tXTH//4R791S5YsUfv27dW5c2cdPXrU9zNo0CDfVdKPW7t2rS644AIlJiaqVq1acrvduvrqq1VcXKzvv/9e0rELwR0+fLjU32n27NlTzZo181t39tln68svv9RNN92kpUuXKj8//6RyAFAzde/eXW63W3FxcTr//PPVqFEjvf3222rYsKFvzMUXX+x3n2XLlik2NlaXXHKJ3/pRo0ZJkt5//31J8v3pypgxY8p9/KVLl+ro0aO6+uqr/fpcVFSU+vTp4+tz9evXV8uWLfXQQw/pkUce0dq1a1VSUuK3rc6dOysyMlJ//vOf9eyzz2rz5s2lHm/JkiWqW7eu0tPT/R6vc+fOatSoke/xrGwLzsGkGziB/fv3yxijxo0bl7otOTlZkrRv3z7ff62MO65Ro0alxjZq1KjUOACoqsTERL9lj8cjSfr111/91pfVu3766Sd99dVXcrvdfj9xcXEyxig3N1eStH37dvXu3Vs//vijHn30UX344YdatWqVHn/8cb/HOt7byut9vzVp0iT97W9/06effqq0tDQlJiaqf//+fLUjEGKee+45rVq1SmvXrtWuXbv01VdfqVevXr7bY2JiFB8f73efffv2qVGjRn4HLiSpQYMGql27tq/X/Pzzz6pVq1aZPee4n376SZLUrVu3Ur3ulVde8fU5l8ul999/X4MGDdLMmTN11lln6ZRTTtHYsWN18OBBSVLLli313nvvqUGDBhozZoxatmypli1b+l2L4qefftKBAwcUGRlZ6vH27Nnjezwr24Jz8DfdwAnUq1dPERER2r17d6nbdu3aJUlKSkqSdOzNrZVxx+3Zs6fU2D179pR6kwwAgfb7N6/SsZ4VHR3t9zfZv79dkhYtWqSCggItWLDA74j1by8uJP3fBwDl9b7mzZv7lmvXrq3x48dr/PjxOnDggN577z1NnjxZgwYN0o4dO/h7RiBEtG3b1nf18rKU1ZsSExP12WefyRjjd/vevXt19OhRX2865ZRTVFxcrD179pT5waL0f33sP//5T6kzbn6vWbNmevrppyVJ33//vV599VVlZmbqyJEjevLJJyVJvXv3Vu/evVVcXKzVq1frscce07hx49SwYUNdfvnlSkpKUmJiot55550yHyMuLs73/yfaFpyDI93ACcTGxuqcc87RggUL/I4MlZSU6IUXXlCTJk3UqlUrSVL//v21bNky3yT7uOeee04xMTGlvtbnpZdekjHGt7xt2zZ9/PHH6tu3b+CeEABYdP7552vTpk1KTExU165dS/0cnyQff9N7/Ci6dOwq5U899ZTf9rp3766oqCi9+OKLfus//vjjUqe7/1bdunV1ySWXaMyYMfrll1/8LoAEIPz0799fhw4d0qJFi/zWP/fcc77bJSktLU2SNGfOnHK3NWjQINWuXVubNm0qs8+V94FAq1atNGXKFHXo0EFr1qwpdXutWrV0zjnn+M74OT7m/PPP1759+1RcXFzmY/32gpIn2hacgyPdwG8sW7aszDdzM2bMUGpqqvr166c77rhDkZGReuKJJ/T111/rpZde8r3hnDZtmpYsWaJ+/fpp6tSpql+/vl588UW9+eabmjlzphISEvy2u3fvXg0bNkzXX3+98vLyNG3aNEVFRWnSpEnBeLoAUKFx48bptdde03nnnafbbrtNHTt2VElJibZv3653331Xt99+u8455xylpqYqMjJSV1xxhe68804dPnxYc+bM0f79+/22V69ePd1xxx2aPn26rrvuOg0fPlw7duxQZmZmqdM/09PTfd/fe8opp2jbtm2aNWuWmjVrpjPOOCOYMQCoYa6++mo9/vjjGjlypLZu3aoOHTroo48+0gMPPKDBgwdrwIABko4dKR4xYoSmT5+un376Seeff748Ho/Wrl2rmJgY3XLLLWrevLnuvfde3X333dq8ebP+9Kc/qV69evrpp5/0+eefKzY2VllZWfrqq6908803a/jw4TrjjDMUGRmpZcuW6auvvtJdd90lSXryySe1bNkyDRkyRE2bNtXhw4d9Zwodr+nyyy/Xiy++qMGDB+vWW2/V2WefLbfbrZ07d2r58uW68MILNWzYMEvbgoPYehk3oIY4fgXN8n62bNliPvzwQ/PHP/7RxMbGmujoaNO9e3ezePHiUttav369SU9PNwkJCSYyMtJ06tTJzJs3z2/M8asKP//882bs2LHmlFNOMR6Px/Tu3dusXr06SM8agNNZuXr5v//9b7/1W7ZsMZL8+lKfPn1Mu3btytzOoUOHzJQpU0zr1q1NZGSkSUhIMB06dDC33Xab2bNnj2/c4sWLTadOnUxUVJQ59dRTzYQJE8zbb79tJJnly5f7xpWUlJgZM2aYlJQUExkZaTp27GgWL15s+vTp43f18ocfftj07NnTJCUlmcjISNO0aVNz7bXXmq1bt1Y+KAA1zom+OcaYinvcvn37zI033mgaN25sateubZo1a2YmTZpkDh8+7DeuuLjY/P3vfzft27f39bAePXqUeg+3aNEi069fPxMfH288Ho9p1qyZueSSS8x7771njDHmp59+MqNGjTJt2rQxsbGxpk6dOqZjx47m73//uzl69KgxxphPPvnEDBs2zDRr1sx4PB6TmJho+vTpY9544w2/x/J6veZvf/ubr2fWqVPHtGnTxtxwww3mhx9+qNS24AwuY35zbiuAoFixYoX69eunf//736WuvAkAAAAgdPA33QAAAAAABAiTbgAAAAAAAoTTywEAAAAACBCOdAMAAAAAECBMugEAAAAACBAm3QAAAAAABEhtuwuoyUpKSrRr1y7FxcXJ5XLZXQ6AEGKM0cGDB5WcnKyICPs+/6TPAQgU+hyAUGe1zzHprsCuXbuUkpJidxkAQtiOHTvUpEkT2x6fPgcg0OhzAELdifock+4KxMXFSToWYnx8vKX7eL1evfvuuxo4cKDcbncgy3MsMrKGnKxxak75+flKSUnx9Rm70OcCh5xOjIyscWpO9LnQR04nRkbWODUnq32OSXcFjp+CFB8fX6kmHRMTo56PfKKi4pM7hWnrX4ec1P1rquMZxcfHO+ofVbCRkzVOz8nuUx0D1edCtX9VhtNfm8FARtY4PadQ7XOQPLWMZp5NThUhI2tqSk5Vff9yoj4XdhdSa968uWbNmmV3GQAAAACAMGDbpNvlclX4M2rUqBPef9GiRUGpFQAAAACAqrDt9PLdu3f7/v+VV17R1KlTtWHDBt+66OhoO8oCAAAAAKDa2Haku1GjRr6fhIQEuVwuv3XZ2dlq2bKlIiMj1bp1az3//PO++zZv3lySNGzYMLlcLt/ypk2bdOGFF6phw4aqU6eOunXrpvfee8+GZwcAAAAAQA29kNrChQt16623atasWRowYICWLFmi0aNHq0mTJurXr59WrVqlBg0aaN68efrTn/6kWrVqSZIOHTqkwYMHa/r06YqKitKzzz6r9PR0bdiwQU2bNj3h4xYVFamoqMi3nJ+fL+nYxTS8Xq+l2o+P80SYyj7tcrcVao4/r1B9ftWFnKxxak521RusPue030cgOPW1GUxkZI1Tcwr1Pof/y4ecykdG1tSUnCrbt6yOdxljbH8FzJ8/X+PGjdOBAwckSb169VK7du00d+5c35hLL71UBQUFevPNNyUd+5vuhQsXaujQoRVuu127dvrLX/6im2++WdKxo+Tjxo3TuHHjSo3NzMxUVlZWqfXZ2dmKiYmp2pMDgDIUFhYqIyNDeXl5lq+mWx3ocwCChT4HINRZ7XM18kj3t99+qz//+c9+63r16qVHH320wvsVFBQoKytLS5Ys0a5du3T06FH9+uuv2r59u6XHnTRpksaPH+9bPv69awMHDqzUV0zk5OTontURKio5ucvdf5056KTuX1Mdzyg1NdWRX30SLORkjVNzOn7kJdiC1edCtX9VhlNfm8FERtY4NadQ73M4dlTyvq4l5FQBMrKmpuRU2fcvVvtcjZx0S6W/68wYc8LvP5swYYKWLl2qv/3tbzr99NMVHR2tSy65REeOHLH0mB6PRx6Pp9R6t9td6Z1cUYnrpL9jzkk71qqoSq7hiJyscVpOdtUarD7npN9FoDnttWkHMrLGaTmFep/D/yGnEyMja+zOqbI9wur4Gvk93W3bttVHH33kt+7jjz9W27Ztfctut1vFxcV+Yz788EONGjVKw4YNU4cOHdSoUSNt3bo1GCUDAAAAAFBKjTzSPWHCBF166aU666yz1L9/fy1evFgLFizwuxJ58+bN9f7776tXr17yeDyqV6+eTj/9dC1YsEDp6elyuVy65557VFJSYuMzAQAAAACEsxp5pHvo0KF69NFH9dBDD6ldu3b65z//qXnz5qlv376+MQ8//LBycnKUkpKiLl26SJL+/ve/q169eurZs6fS09M1aNAgnXXWWTY9CwAAAABAuKsRR7pHjRqlUaNG+a37y1/+or/85S/l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fftq3Lhx1b5dAKgM+hyAUEefgxPUtrsAIBQtWLBAbrfb7jLKlZmZqUWLFmndunXVsr1Ro0bpwIEDWrRoUbVsD0DNR58DEOroc6guTLqBAKhfv77dJQRFcXGxXC6X3WUAsAF9DkCoo8+hunB6OarFf/7zH3Xo0EHR0dFKTEzUgAEDVFBQ4Lt93rx5atu2raKiotSmTRs98cQTfvffuXOnLr/8ctWvX1+xsbHq2rWrPvvsM9/tc+bMUcuWLRUZGanWrVvr+eef97u/y+XSv/71Lw0bNkwxMTE644wz9MYbb/iNeeutt9SqVStFR0erX79+2rp1q9/t27ZtU3p6uurVq6fY2Fi1a9dOb731VrnP+YknntAZZ5yhqKgoNWzYUJdcconvtt+fjtS8eXM98MADuuaaaxQXF6emTZtq7ty5lcpg8eLF+sMf/qCoqCiddtppysrK0tGjR8utb8WKFTr77LMVGxurunXrqlevXtq2bZvmz5+vrKwsffnll3K5XHK5XJo/f74k6ZFHHlGHDh0UGxurlJQU3XTTTTp06JBvm/Pnz1fdunW1ZMkSnXnmmfJ4PBo9erSeffZZvf76677trVixoty6AKeiz9Hn6HMIdfQ5+hx9LkAMcJJ27dplateubR555BGzZcsW89VXX5nHH3/cHDx40BhjzNy5c03jxo3Na6+9ZjZv3mxee+01U79+fTN//nxjjDEHDx40p512mundu7f58MMPzQ8//GBeeeUV8/HHHxtjjFmwYIFxu93m8ccfNxs2bDAPP/ywqVWrllm2bJmvBkmmSZMmJjs72/zwww9m7Nixpk6dOmbfvn3GGGO2b99uPB6PufXWW813331nXnjhBdOwYUMjyezfv98YY8yQIUNMamqq+eqrr8ymTZvM4sWLzQcffFDmc161apWpVauWyc7ONlu3bjVr1qwxjz76qO/2Pn36mFtvvdW33KxZM1O/fn3z+OOPmx9++MHMmDHDREREmG+//dZSBu+8846Jj4838+fPN5s2bTLvvvuuad68ucnMzCyzPq/XaxISEswdd9xhNm7caL755hszf/58s23bNlNYWGhuv/12065dO7N7926ze/duU1hYaIwx5u9//7tZtmyZ2bx5s3n//fdN69atzV/+8hffdufNm2fcbrfp2bOn+e9//2u+++47c+DAAXPppZeaP/3pT77tFRUV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\n", | |
| "text/plain": [ | |
| "<Figure size 1000x400 with 3 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, axes = plot_all(sync_transfer_return_times, threads_transfer_return_times, processes_transfer_return_times,\n", | |
| " title='Transfer data to and from function', figsize=(10, 4))\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 38, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "sync_save_csv_times = process(save_csv, args=(100_000,), n=n, scheduler=None)\n", | |
| "threads_save_csv_times = process(save_csv, args=(100_000,), n=n, scheduler=thread_client)\n", | |
| "processes_save_csv_times = process(save_csv, args=(100_000,), n=n, scheduler=process_client)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 39, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAGVCAYAAADjWpKuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAA9hAAAPYQGoP6dpAABpAklEQVR4nO3deXwTdf7H8XcKaXrQVmiBtlIORUQRii4qhwgIBatWwPXsLgIe64GLiNfiRauuVXZVVFQWV8GriLsCK4hoXU4XRRAQdBVFbgGxKC3QpYT2+/sDyY/QK22aTiZ5PR+PPiCT78x8PvNNPplvZjLjMMYYAQAAAACAehdhdQAAAAAAAIQqBt0AAAAAAAQIg24AAAAAAAKEQTcAAAAAAAHCoBsAAAAAgABh0A0AAAAAQIAw6AYAAAAAIEAYdAMAAAAAECAMugEAAAAACBAG3QCAsLF8+XINHTpUrVu3lsvlUsuWLdWjRw/deeedAV3viBEj1LZt24CuoyZz5sxRVlaWWrZsqcjISDVr1kz9+/fXm2++Kbfb7Wm3Z88ejRs3TqeffrpiY2OVkJCgjh07atiwYVq7dq0kaejQoYqOjtbevXurXN/vfvc7OZ1O/fjjj4FODQCAoMagGwAQFt577z317NlTxcXFmjBhgj788EM988wz6tWrl2bMmBHQdT/44IOaNWtWQNdRFWOMRo4cqUsvvVTl5eV66qmn9NFHH+nVV19Venq6br31Vr3wwguSpP3796t79+6aNm2abrjhBr377rt688039Yc//EGbNm3SmjVrJEnXX3+9Dh48qPz8/ErXWVRUpFmzZumSSy5Ry5YtGypVAACCksMYY6wOAgCAQOvTp49++OEHffPNN2rcuLHXc+Xl5YqICM3voSdMmKB7771Xubm5euihhyo8v2vXLm3YsEHnnXeepk6dquuuu04LFixQv379KrQ9up3KysrUunVrpaSkaOXKlRXaTZ48WbfccovmzJmjSy65JCB5AQBgF6G5hwEAwHH27NmjpKSkCgNuSRUG3DNmzNDAgQOVkpKi6OhonXbaafrTn/6kAwcOeNpMnDhRDodDGzZsqLC8e++9V5GRkSosLJRU+enlDodDt912m15//XWddtppiomJUXp6uubOnVthef/617/UpUsXuVwunXTSSXrmmWeUk5Mjh8NRbc5ut1tPPPGEOnbsqAcffLDSNsnJyTrvvPM820iSUlJSKm17dDs1atRIw4cP1+eff65169ZVaDd16lSlpKQoMzPTM+3FF19Uenq6mjRpori4OHXs2FH33XdftfEDABAKGHQDAMJCjx49tHz5co0ePVrLly/3+h3z8b777jtddNFFevnllzV//nyNGTNGb7/9trKysjxtfv/73ysyMlLTpk3zmresrExvvPGGsrKylJSUVG1M7733niZNmqSHH35Y77zzjpo1a6ahQ4dq48aNnjbz58/XZZddpsTERM2YMUMTJkzQ9OnT9eqrr9aY88qVK/Xzzz9r8ODBNQ7QpSPbSJKuvfZazZ492zMIr8x1110nh8OhV155xWv6f//7X3322WcaPny4GjVqJEl66623dOutt6pPnz6aNWuWZs+erTvuuMPrSwwAAEKWAQAgDBQWFprzzjvPSDKSjNPpND179jR5eXlm3759Vc5XXl5u3G63Wbx4sZFkvvjiC89zl112mWnVqpUpKyvzTJs3b56RZObMmeOZNnz4cNOmTRuv5UoyLVu2NMXFxZ5pu3btMhERESYvL88z7eyzzzZpaWmmtLTUM23fvn0mMTHR1PQx/tZbbxlJZvLkydW2O9bDDz9sIiMjPdupXbt25uabb/bK+6g+ffqYpKQkc+jQIc+0O++800gy3377rWfabbfdZk444QSfYwAAIJRwpBsAEBYSExO1dOlSrVixQo8//rgGDx6sb7/9VuPGjVPnzp09p4JL0saNG5Wdna3k5GQ1atRITqdTffr0kSR9/fXXnnYjR47U9u3b9dFHH3mmTZ06VcnJyV6nVlelX79+iouL8zxu2bKlWrRooS1btkiSDhw4oJUrV2rIkCGKjIz0tGvSpInXUff69OCDD2rr1q165ZVXdNNNN6lJkyaaPHmyfvOb32j69Oleba+//noVFhbq3XfflSQdPnxYb7zxhnr37q1TTjnF0+6cc87R3r17dc011+hf//qX17YGACDUMegGAISVbt266d5779U//vEP7dixQ3fccYc2b96sCRMmSDpyBe/evXtr+fLlevTRR7Vo0SKtWLFCM2fOlCT973//8ywrMzNTKSkpmjp1qiTpl19+0bvvvqtrr73Wc2p1dRITEytMc7lcnnX88ssvMsZUegVwX64K3rp1a0nSpk2bamx7/LJHjhypyZMna+3atVq8eLEiIyN1++23e7W7/PLLlZCQ4Ml/3rx5+vHHH3X99dd7tRs2bJheeeUVbdmyRb/97W/VokULnXvuuSooKKhVXAAA2BGDbgBA2HI6nRo/frwk6csvv5QkLViwQDt27NArr7yiG264Qeeff766devmdUT6qEaNGmnYsGGaPXu29u7dq/z8fJWWlmrkyJH1El/Tpk3lcDgqvdf1rl27apy/W7duatasmf71r3/J+HGzkvPPP18DBw7UTz/9pN27d3umR0dH65prrtH8+fO1c+dOvfLKK4qLi9MVV1xRYRkjR47UsmXLVFRUpPfee0/GGF1yySWeo/oAAIQqBt0AgLCwc+fOSqcfPV08NTVVkjwXHHO5XF7t/va3v1U6/8iRI3Xw4EFNnz5d06ZNU48ePdSxY8d6iTk2NlbdunXT7NmzdejQIc/0/fv3V3qV8+M5nU7de++9+uabb/TII49U2mb37t36z3/+I0n68ccfVV5eXqFNWVmZvvvuO8XExOiEE07weu76669XWVmZ/vKXv2jevHm6+uqrFRMTU21OmZmZuv/++3Xo0CF99dVXNeYBAICdVbxvCgAAIWjQoEFq1aqVsrKy1LFjR5WXl2vNmjV68skn1aRJE8+p0z179lTTpk118803a/z48XI6nXrzzTf1xRdfVLrcjh07qkePHsrLy9O2bds0ZcqUeo374Ycf1sUXX6xBgwbp9ttv9wxwmzRpop9//rnG+e+++259/fXXGj9+vD777DNlZ2crLS1NRUVFWrJkiaZMmaLc3Fz16tVLr7/+uv72t78pOztbZ599thISErR9+3b9/e9/11dffaWHHnrI67fl0pGj6V26dNHEiRNljKlwarkk3XjjjYqOjlavXr2UkpKiXbt2KS8vTwkJCTr77LPrbVsBABCMONINAAgLDzzwgJo2baqnn35al156qTIzM/Xss89qwIAB+uyzz9S5c2dJR35n/d577ykmJka///3vdd1116lJkyaaMWNGlcseOXKktm3bpujoaF111VX1GveFF16od955R3v27NFVV12lsWPHaujQoRo8eHCFo86VcTgcmjp1qv71r39JksaMGaMLLrhA1157rVauXKknnnhCt9xyiyTp4osv1uDBgzVv3jxdd911uuCCCzRq1CiVlZXp9ddfV25ubqXruP7662WM0emnn65zzz23wvO9e/fWl19+qdtvv10ZGRm644471KFDBy1dulTNmzev+8YBAMAGHMafH3kBAIAG53a71bVrV5144on68MMPrQ4HAABUg9PLAQAIctdff70yMjI8p2ZPnjxZX3/9tZ555hmrQwMAADVg0A0AQJDbt2+f7rrrLv30009yOp0666yzNG/ePA0YMMDq0AAAQA04vRwAAAAAgADhQmoAAAAAAAQIg24AAAAAAAKEQTcAAAAAAAHCoBsAAAAAgABh0A0AAAAAQIAw6AYAAAAAIEAYdAMAAAAAECAMugEAAAAACBAG3QAAAAAABAiDbgAAAAAAAoRBNwAAAAAAAcKgGwAAAACAAGHQDQAAAABAgDDoBgAAAAAgQBh0AwAAAAAQIAy6AQAAAAAIEAbdAAAAAAAECINuAAAAAAAChEE3AAAAAAABwqAbAAAAAIAAYdANAAAAAECAMOgGAAAAACBAGHQDAAAAABAgDLoBAAAAAAgQBt0AAAAAAAQIg24AAAAAAAKEQTcAAAAAAAHCoBsAAAAAgABh0A0AAAAAQIAw6AYkTZs2TQ6HQytXrrQ6FACoksPh8Olv0aJFWrRokRwOh/75z39aHbZP+vbtq759+1odBoAGcnTf6+hf48aN1apVK40cOVI//PCD1eEB9aqx1QEAAADffPLJJ16PH3nkES1cuFALFizwmn766adr1apVDRkaANTJ1KlT1bFjR/3vf//TkiVLlJeXp8WLF2vdunWKjY21OjygXjDoBgDAJrp37+71uHnz5oqIiKgwvT6UlJQoJiam3pcLAMc644wz1K1bN0lSv379VFZWpkceeUSzZ8/W7373uwrtqU2wI04vB3z08ccfq3///oqLi1NMTIx69uyp9957r0K7L7/8UoMHD1bTpk0VFRWlrl276tVXX/Vqc/S0zzfeeENjx45VcnKyoqOj1adPH61evbqhUgIQBtxut+6//36lpqYqPj5eAwYM0Pr1673a9O3bV2eccYaWLFminj17KiYmRtddd50kqbi4WHfddZfatWunyMhInXjiiRozZowOHDjgtYznn39e559/vlq0aKHY2Fh17txZEyZMkNvt9mpnjNGECRPUpk0bRUVF6ayzztL7779fIe7y8nI9+uijOvXUUxUdHa0TTjhBXbp00TPPPFPPWwhAMDn6JeKWLVs0YsQINWnSROvWrdPAgQMVFxen/v37S5J+/vln3XrrrTrxxBMVGRmpk046Sffff79KS0u9lldeXq7nnntOXbt29dSS7t2769133/VqN2PGDPXo0UOxsbFq0qSJBg0aVGGfbOPGjbr66quVmpoql8ulli1bqn///lqzZo2nzYIFC9S3b18lJiYqOjparVu31m9/+1uVlJR42hw6dEiPPvqoOnbsKJfLpebNm2vkyJH66aefvNbny7JgDxzpBnywePFiZWRkqEuXLnr55Zflcrn0wgsvKCsrS9OnT9dVV10lSVq/fr169uypFi1a6Nlnn1ViYqLeeOMNjRgxQj/++KPuuecer+Xed999Ouuss/T3v/9dRUVFysnJUd++fbV69WqddNJJVqQKIMTcd9996tWrl/7+97+ruLhY9957r7KysvT111+rUaNGnnY7d+7U73//e91zzz167LHHFBERoZKSEvXp00fbt2/Xfffdpy5duuirr77SQw89pHXr1umjjz6Sw+GQJH3//ffKzs72DM6/+OIL/fnPf9Y333yjV155xbOe3Nxc5ebm6vrrr9fll1+ubdu26cYbb1RZWZlOPfVUT7sJEyYoJydHDzzwgM4//3y53W5988032rt3b4NtOwANb8OGDZKOnMnz7bff6tChQ7r00kt100036U9/+pMOHz6sgwcPql+/fvr++++Vm5urLl26aOnSpcrLy9OaNWu8DoqMGDFCb7zxhq6//no9/PDDioyM1KpVq7R582ZPm8cee0wPPPCARo4cqQceeECHDh3SX/7yF/Xu3VufffaZTj/9dEnSRRddpLKyMk2YMEGtW7dWYWGhli1b5qlLmzdv1sUXX6zevXvrlVde0QknnKAffvhB8+fP16FDhxQTE6Py8nINHjxYS5cu1T333KOePXtqy5YtGj9+vPr27auVK1cqOjrap2XBRgwAM3XqVCPJrFixotLnu3fvblq0aGH27dvnmXb48GFzxhlnmFatWpny8nJjjDFXX321cblcZuvWrV7zZ2ZmmpiYGLN3715jjDELFy40ksxZZ53lmdcYYzZv3mycTqe54YYb6jtFACFo+PDhJjY2ttLnjtaZiy66yGv622+/bSSZTz75xDOtT58+RpL597//7dU2Ly/PREREVKiN//znP40kM2/evErXXVZWZtxut3nttddMo0aNzM8//2yMMeaXX34xUVFRZujQoV7t//Of/xhJpk+fPp5pl1xyienatWv1GwCAbR3d9/r000+N2+02+/btM3PnzjXNmzc3cXFxZteuXWb48OFGknnllVe85p08ebKRZN5++22v6U888YSRZD788ENjjDFLliwxksz9999fZRxbt241jRs3Nn/84x+9pu/bt88kJyebK6+80hhjTGFhoZFkJk6cWOWyjtbGNWvWVNlm+vTpRpJ55513vKavWLHCSDIvvPCCz8uCfXB6OVCDAwcOaPny5br88svVpEkTz/RGjRpp2LBh2r59u+dUzQULFqh///5KS0vzWsaIESNUUlJS4SJI2dnZnqNEktSmTRv17NlTCxcuDGBGAMLJpZde6vW4S5cuko6cunmspk2b6oILLvCaNnfuXJ1xxhnq2rWrDh8+7PkbNGiQ5yrpR61evVqXXnqpEhMT1ahRIzmdTl177bUqKyvTt99+K+nIheAOHjxY4XeaPXv2VJs2bbymnXPOOfriiy9066236oMPPlBxcbFf2wFAcOrevbucTqfi4uJ0ySWXKDk5We+//75atmzpafPb3/7Wa54FCxYoNjZWl19+udf0ESNGSJL+/e9/S5LnpyujRo2qcv0ffPCBDh8+rGuvvdarzkVFRalPnz6eOtesWTOdfPLJ+stf/qKnnnpKq1evVnl5udeyunbtqsjISP3hD3/Qq6++qo0bN1ZY39y5c3XCCScoKyvLa31du3ZVcnKyZ32+LAv2waAbqMEvv/wiY4xSUlIqPJeamipJ2rNnj+dfX9odlZycXKFtcnJyhXYAUFeJiYlej10ulyTpf//7n9f0ymrXjz/+qLVr18rpdHr9xcXFyRijwsJCSdLWrVvVu3dv/fDDD3rmmWe0dOlSrVixQs8//7zXuo7Wtqpq37HGjRunv/71r/r000+VmZmpxMRE9e/fn1s7AiHmtdde04oVK7R69Wrt2LFDa9euVa9evTzPx8TEKD4+3muePXv2KDk52evAhSS1aNFCjRs39tSan376SY0aNaq05hz1448/SpLOPvvsCrVuxowZnjrncDj073//W4MGDdKECRN01llnqXnz5ho9erT27dsnSTr55JP10UcfqUWLFho1apROPvlknXzyyV7Xovjxxx+1d+9eRUZGVljfrl27POvzZVmwD37TDdSgadOmioiI0M6dOys8t2PHDklSUlKSpCM7t760O2rXrl0V2u7atavC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mDFj6n25AFAb1DkAoY46BztobHUAQCiaOXOmnE6n1WFUKScnR7Nnz9aaNWvqZXkjRozQ3r17NXv27HpZHoDgR50DEOqoc6gvDLqBAGjWrJnVITSIsrIyORwOq8MAYAHqHIBQR51DfeH0ctSLf/7zn+rcubOio6OVmJioAQMG6MCBA57np06dqtNOO01RUVHq2LGjXnjhBa/5t2/frquvvlrNmjVTbGysunXrpuXLl3uef/HFF3XyyScrMjJSp556ql5//XWv+R0Oh/7+979r6NChiomJ0SmnnKJ3333Xq828efPUoUMHRUdHq1+/ftq8ebPX81u2bFFWVpaaNm2q2NhYderUSfPmzasy5xdeeEGnnHKKoqKi1LJlS11++eWe544/Halt27Z67LHHdN111ykuLk6tW7fWlClTarUN5syZo9/85jeKiorSSSedpNzcXB0+fLjK+BYtWqRzzjlHsbGxOuGEE9SrVy9t2bJF06ZNU25urr744gs5HA45HA5NmzZNkvTUU0+pc+fOio2NVVpamm699Vbt37/fs8xp06bphBNO0Ny5c3X66afL5XJp5MiRevXVV/Wvf/3Ls7xFixZVGRdgV9Q56hx1DqGOOkedo84FiAH8tGPHDtO4cWPz1FNPmU2bNpm1a9ea559/3uzbt88YY8yUKVNMSkqKeeedd8zGjRvNO++8Y5o1a2amTZtmjDFm37595qSTTjK9e/c2S5cuNd99952ZMWOGWbZsmTHGmJkzZxqn02mef/55s379evPkk0+aRo0amQULFnhikGRatWpl8vPzzXfffWdGjx5tmjRpYvbs2WOMMWbr1q3G5XKZ22+/3XzzzTfmjTfeMC1btjSSzC+//GKMMebiiy82GRkZZu3ateb77783c+bMMYsXL6405xUrVphGjRqZ/Px8s3nzZrNq1SrzzDPPeJ7v06ePuf322z2P27RpY5o1a2aef/55891335m8vDwTERFhvv76a5+2wfz58018fLyZNm2a+f77782HH35o2rZta3JyciqNz+12m4SEBHPXXXeZDRs2mP/+979m2rRpZsuWLaakpMTceeedplOnTmbnzp1m586dpqSkxBhjzNNPP20WLFhgNm7caP7973+bU0891dxyyy2e5U6dOtU4nU7Ts2dP85///Md88803Zu/evebKK680F154oWd5paWlvr14AJugzlHnqHMIddQ56hx1LnAYdMNvn3/+uZFkNm/eXOnzaWlpJj8/32vaI488Ynr06GGMMeZvf/ubiYuL8xTU4/Xs2dPceOONXtOuuOIKc9FFF3keSzIPPPCA5/H+/fuNw+Ew77//vjHGmHHjxpnTTjvNlJeXe9rce++9XkW6c+fOVRa9473zzjsmPj7eFBcXV/p8ZUX697//vedxeXm5adGihXnxxReNMTVvg969e5vHHnvMa9rrr79uUlJSKm2/Z88eI8ksWrSo0ufHjx9v0tPTq0rP4+233zaJiYmex1OnTjWSzJo1a7zaDR8+3AwePLjG5QF2RZ2riDoHhBbqXEXUOdQXTi+H39LT09W/f3917txZV1xxhV566SX98ssvkqSffvpJ27Zt0/XXX68mTZp4/h599FF9//33kqQ1a9bozDPPrPJ3M19//bV69erlNa1Xr176+uuvvaZ16dLF8//Y2FjFxcVp9+7dnmV0797d6/cqPXr08Jp/9OjRevTRR9WrVy+NHz9ea9eurTLnjIwMtWnTRieddJKGDRumN998UyUlJdVup2PjczgcSk5O9sRX0zb4/PPP9fDDD3ttwxtvvFE7d+6sdL3NmjXTiBEjNGjQIGVlZemZZ57Rzp07q41PkhYuXKiMjAydeOKJiouL07XXXqs9e/Z4nVoWGRnplQsQDqhz1Dkg1FHnqHMIHAbd8FujRo1UUFCg999/X6effrqee+45nXrqqdq0aZPKy8slSS+99JLWrFnj+fvyyy/16aefSpKio6NrXMfxF3cwxlSYdvzVJR0Oh2f9xpga13HDDTdo48aNGjZsmNatW6du3brpueeeq7RtXFycVq1apenTpyslJUUPPfSQ0tPTq71dRXXx1bQNysvLlZub67UN161bp++++05RUVGVzjN16lR98skn6tmzp2bMmKEOHTp4tnlltmzZoosuukhnnHGG3nnnHX3++ed6/vnnJUlut9vTLjo6mottIOxQ56hzQKijzlHnEDgMulEvHA6HevXqpdzcXK1evVqRkZGaNWuWWrZsqRNPPFEbN25U+/btvf7atWsn6cg3hmvWrNHPP/9c6bJPO+00ffzxx17Tli1bptNOO83n+E4//fQKBaqygpWWlqabb75ZM2fO1J133qmXXnqpymU2btxYAwYM0IQJE7R27Vpt3rxZCxYs8DmmY9W0Dc466yytX7++wjZs3769IiKqfhufeeaZGjdunJYtW6YzzjhD+fn5ko58u1lWVubVduXKlTp8+LCefPJJde/eXR06dNCOHTt8ir+y5QGhhjpHnaPOIdRR56hz1LnA4JZh8Nvy5cv173//WwMHDlSLFi20fPly/fTTT54impOTo9GjRys+Pl6ZmZkqLS3VypUr9csvv2js2LG65ppr9Nhjj2nIkCHKy8tTSkqKVq9erdTUVPXo0UN33323rrzySp111lnq37+/5syZo5kzZ+qjjz7yOcabb75ZTz75pMaOHaubbrpJn3/+uecKj0eNGTNGmZmZ6tChg3755RctWLCgyg+CuXPnauPGjTr//PPVtGlTzZs3T+Xl5Tr11FPrtA1r2gYPPfSQLrnkEqWlpemKK65QRESE1q5dq3Xr1unRRx+tsLxNmzZpypQpuvTSS5Wamqr169fr22+/1bXXXivpyNU3N23apDVr1qhVq1aKi4vTySefrMOHD+u5555TVlaW/vOf/2jy5Mk+xd+2bVt98MEHWr9+vRITE5WQkBDU97UEaos6R52jziHUUeeoc9S5ALLyB+UIDf/973/NoEGDTPPmzY3L5TIdOnQwzz33nFebN99803Tt2tVERkaapk2bmvPPP9/MnDnT8/zmzZvNb3/7WxMfH29iYmJMt27dzPLlyz3Pv/DCC+akk04yTqfTdOjQwbz22mtey5dkZs2a5TUtISHBTJ061fN4zpw5pn379sblcpnevXubV155xevCG7fddps5+eSTjcvlMs2bNzfDhg0zhYWFlea8dOlS06dPH9O0aVMTHR1tunTpYmbMmOF5vrILbzz99NNey0hPTzfjx4/3eRvMnz/f9OzZ00RHR5v4+HhzzjnnmClTplQa365du8yQIUNMSkqKiYyMNG3atDEPPfSQKSsrM8YYc/DgQfPb3/7WnHDCCUaSZzs99dRTJiUlxURHR5tBgwaZ1157zWsbTZ061SQkJFRY3+7du01GRoZp0qSJkWQWLlxYaVyAXVHnqHPUOYQ66hx1jjoXOA5jfPhxBAAAAAAAqDV+0w0AAAAAQIAw6AYAAAAAIEAYdAMAAAAAECAMugEAAAAACBAG3QAAAAAABAiDbgAAAAAAAoRBNwAAAAAAAcKgGwAAAACAAGHQDQAAAABAgDDoBgAAAAAgQBh0AwAAAAAQIAy6AQAAAAAIkP8Dk9EQ+QcVxD0AAAAASUVORK5CYII=\n", | |
| "text/plain": [ | |
| "<Figure size 1000x400 with 3 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, axes = plot_all(sync_save_csv_times, threads_save_csv_times, processes_save_csv_times,\n", | |
| " title='Saving CSVs', figsize=(10,4))\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 40, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "sync_load_csv_times = process(load_csv, args=(None,), n=n, scheduler=None)\n", | |
| "threads_load_csv_times = process(load_csv, args=(None,), n=n, scheduler=thread_client)\n", | |
| "processes_load_csv_times = process(load_csv, args=(None,), n=n, scheduler=process_client)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 41, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAGVCAYAAADjWpKuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAA9hAAAPYQGoP6dpAABmk0lEQVR4nO3deXhU1f3H8c8EJhMSkghBCJGwiALKTl1YBIIYaMAoVkFNi4DLz1YsInVDFBM3qm1dUShWwS24sVRwI8pelIJAwVZxAwEBaRASSCQMyfn9gZkyJIFZMpk7d96v5+HRuXPuvec7584nc+bemXEYY4wAAAAAAECtiwl3BwAAAAAAsCsm3QAAAAAAhAiTbgAAAAAAQoRJNwAAAAAAIcKkGwAAAACAEGHSDQAAAABAiDDpBgAAAAAgRJh0AwAAAAAQIky6AQAAAAAIESbdAADbmTVrlhwOh9auXRvurmjr1q1yOByaNWuWZ1lubq4cDkf4OiVpxYoVGjFihE477TTFxsYqOTlZvXv31rRp01RSUuJpV1JSokceeURdu3ZVUlKSEhMT1bZtW40YMULLli2TJN16661yOBz64osvatzfpEmT5HA4tG7dupDXBgCAlTDpBgCgjl1//fX6+OOPw7b/++67T/369dP333+vBx54QAUFBXrttdc0cOBA5ebm6p577pEklZeXa9CgQXrooYd0xRVX6M0339Rbb72lW2+9VUVFRVqxYoUk6brrrpMkvfDCC9Xur6KiQi+99JK6deumHj161E2RAABYRP1wdwAAgGjTokULtWjRIiz7fvPNN3X//ffruuuu03PPPed1xj0rK0t33HGH5w2B5cuXa9WqVXrhhRc0ZswYT7vBgwfr5ptvVkVFhSSpU6dOOu+88/Tyyy/r4YcfVv363i8vFi1apB07dujOO++sgwoBALAWznQDAKLWypUrNXDgQCUmJio+Pl69e/fWO++849Xmv//9r2666SadffbZatiwoZo2baoLL7zQc5b3WDt37tSIESOUmJio5ORkXXnlldq9e3eVdtVdXt66dWtdfPHFev/999WjRw81aNBAHTp0qPbs8cqVK9WrVy/FxcXptNNO07333qu//e1vcjgc2rp16wlrvv/++9WoUSM99dRT1V7inpiYqEGDBkmS9u7dK0lq3rx5tduKifnfy4jrrrtOu3fv1nvvvVel3cyZM+VyufTrX//as+zNN9/U+eefr+TkZMXHx+v000/Xtddee8K+AwAQiZh0AwCi0rJly3ThhReqqKhIzz//vGbPnq3ExERlZ2fr9ddf97T78ccfJR29JPudd97RzJkzdfrppysjI0NLly71tPvpp5900UUXadGiRZoyZYrefPNNpaam6sorr/S5T//617/0hz/8Qbfeeqv+/ve/q0uXLrruuuu0fPlyT5uNGzcqMzNTpaWlevHFFzV9+nStW7dODz300Em3v2vXLn322WcaNGiQ4uPjT9r+nHPOkdPp1C233KJXX31Vu3btqrHt1Vdfrfj4+CpvEuzbt09///vfddlll6lRo0aSpI8//lhXXnmlTj/9dL322mt65513NHnyZB05cuSkfQIAINJweTkAICrdddddatSokZYuXaqGDRtKki6++GJ169ZNt912m0aMGCGHw6H27dvr2Wef9axXXl6uwYMHa+vWrXrqqaeUkZEhSXrxxRf1+eef6+9//7suueQSSdKgQYP0008/6bnnnvOpT4WFhfrHP/6hli1bSpL69eunjz76SPn5+erXr58k6cEHH1S9evX00UcfqUmTJpKkoUOHqnPnzifd/rZt2yRJbdq08ak/rVu31vTp03XLLbfoN7/5jaSjZ70zMzN1/fXXq2/fvp62iYmJGj58uPLz87Vnzx41bdpUkvTqq6+qrKzM87lvSVq1apWMMZo+fbqSk5M9y0ePHu1TvwAAiCSc6QYARJ2SkhKtXr1aV1xxhWfCLUn16tXTyJEjtWPHDm3evNmzfPr06erRo4fi4uJUv359OZ1OffTRR/r88889bZYsWaLExETPhLtSTk6Oz/3q1q2bZ8ItSXFxcWrXrp2+++47z7LKM/SVE27p6GXeI0aM8Hk//rj22mu1Y8cO5efna9y4cUpPT9crr7yi/v37609/+pNX2+uuu05ut1svv/yyZ9nMmTPVqlUrDRw40LPs3HPPlSSNGDFCb7zxhr7//vuQ9B0AACtg0g0AiDr79u2TMabazyqnpaVJ+t/nmR977DH97ne/0/nnn685c+bok08+0Zo1a/TLX/5SP/30k2e9vXv3qlmzZlW2l5qa6nO/UlJSqixzuVw+7ae6ZcernNBv2bLF5z5JUnJysq6++mo9+eSTWr16tTZu3KhmzZpp0qRJ2r9/v6dd37591a5dO82cOVPS0Uvh161bpzFjxnh9frxfv36aP3++jhw5omuuuUYtWrRQp06dNHv2bL/6BQBAJGDSDQCIOo0aNVJMTEy1n1HeuXOnJHnOJL/yyivKyMjQtGnTNHToUJ1//vk655xzdODAAa/1UlJS9MMPP1TZXnVfpBaMYPbTvHlzde7cWYsWLVJpaWnAfejYsaOuuuoqud1uffnll173XXvttfr3v/+tf/7zn3rhhRcUExNT7WXjl156qT766CMVFRVp6dKlatGihXJycsL6U2oAAIQCk24AQNRJSEjQ+eefr7lz53qdRa6oqNArr7yiFi1aqF27dpIkh8Mhl8vltf7GjRurTA4HDBigAwcO6O233/Zanp+fX6t979+/vxYvXqzCwkKvfr/55ps+rX/vvfdq3759GjdunIwxVe4/ePCgFi1aJOnoWfXDhw9Xu50vvvhC0v+uDKg0atQo1a9fX3/961/16quvauDAgWrVqlWN/XG5XOrfv78eeeQRSdL69et9qgMAgEjBF6kBAGxr8eLF1f6E1pAhQzRlyhRlZmZqwIABuu222xQbG6tnn31Wn332mWbPnu25HPriiy/WAw88oPvuu0/9+/fX5s2bdf/996tNmzZe37Z9zTXX6PHHH9c111yjhx56SGeeeabeffddffDBB7Va06RJk7RgwQINHDhQkyZNUoMGDTR9+nSVlJRI8v4Zr+oMHz5c9957rx544AF98cUXuu6669S2bVuVlpZq9erV+utf/6orr7xSgwYN0pIlS3TLLbfo17/+tXr37q2UlBTt2bNHs2fP1vvvv++5NPxYqampGjJkiGbOnCljjNcXqFWaPHmyduzYoYEDB6pFixbav3+/nnzySTmdTvXv37/2HiwAAKzAAABgMzNnzjSSavy3ZcsWY4wxK1asMBdeeKFJSEgwDRo0MD179jQLFizw2lZZWZm57bbbzGmnnWbi4uJMjx49zPz5882oUaNMq1atvNru2LHDXH755aZhw4YmMTHRXH755WbVqlVGkpk5c6an3X333WeO/xPcqlUrM3To0Cq19O/f3/Tv399r2YoVK8z5559vXC6XSU1NNbfffrt55JFHjCSzf/9+nx6jZcuWmSuuuMI0b97cOJ1Ok5SUZHr16mX+9Kc/meLiYmOMMdu3bzf33HOP6dOnj0lNTTX169c3iYmJ5vzzzzdPP/20OXLkSLXb/vvf/24kmcaNG5tDhw5VuX/hwoUmKyvLnHbaaSY2NtY0bdrUDBkyxKxYscKnvgMAEEkcxlRzbRkAAIgogwYN0tatW6t8xhoAAIQXl5cDABBhJkyYoO7duys9PV0//vijXn31VRUUFOj5558Pd9cAAMBxmHQDABBhysvLNXnyZO3evVsOh0Nnn322Xn75Zf3mN78Jd9cAAMBxuLwcAAAAAIAQ4SfDAAAAAAAIESbdAAAAAACECJNuAAAAAABChEk3AAAAAAAhwqQbAAAAAIAQYdINAAAAAECIMOkGAAAAACBEmHQDAAAAABAiTLoBAAAAAAgRJt0AAAAAAIQIk24AAAAAAEKESTcAAAAAACHCpBsAAAAAgBBh0g0AAAAAQIgw6QYAAAAAIESYdAMAAAAAECJMugEAAAAACBEm3QAAAAAAhAiTbgAAAAAAQoRJNwAAAAAAIcKkGwAAAACAEGHSDQAAAABAiDDpBgAAAAAgRJh0AwAAAAAQIky6AQAAAAAIESbdAAAAAACECJNuAAAAAABChEk3AAAAAAAhwqQbAAAAAIAQYdINSJo1a5YcDofWrl0b7q4AQI0cDodP/5YuXaqlS5fK4XDorbfeCne3fZKRkaGMjIxwdwNAHal87VX5r379+mrRooXGjBmj77//PtzdA2pV/XB3AAAA+Objjz/2uv3AAw9oyZIlWrx4sdfys88+W+vWravLrgFAQGbOnKkOHTrop59+0vLlyzVlyhQtW7ZMmzZtUkJCQri7B9QKJt0AAESInj17et0+9dRTFRMTU2V5bSgtLVV8fHytbxcAjtWpUyedc845kqQBAwaovLxcDzzwgObPn69f//rXVdqTTYhEXF4O+GjlypUaOHCgEhMTFR8fr969e+udd96p0u6zzz7TpZdeqkaNGikuLk7dunXTiy++6NWm8rLPV155RRMmTFBqaqoaNGig/v37a/369XVVEoAo4Ha7NWnSJKWlpSkpKUkXXXSRNm/e7NUmIyNDnTp10vLly9W7d2/Fx8fr2muvlSQVFxfrtttuU5s2bRQbG6vTTjtN48ePV0lJidc2nnnmGfXr109NmzZVQkKCOnfurEcffVRut9urnTFGjz76qFq1aqW4uDj16NFD7733XpV+V1RU6MEHH1T79u3VoEEDnXLKKerSpYuefPLJWn6EAFhJ5ZuI3333nUaPHq2GDRtq06ZNGjRokBITEzVw4EBJ0o8//qibbrpJp512mmJjY3X66adr0qRJKisr89peRUWFnn76aXXr1s2TJT179tTbb7/t1e71119Xr169lJCQoIYNG2rw4MFVXpN9++23uuqqq5SWliaXy6VmzZpp4MCB2rBhg6fN4sWLlZGRoZSUFDVo0EAtW7bU5ZdfrtLSUk+bw4cP68EHH1SHDh3kcrl06qmnasyYMfrvf//rtT9ftoXIwJluwAfLli1TZmamunTpoueff14ul0vPPvussrOzNXv2bF155ZWSpM2bN6t3795q2rSpnnrqKaWkpOiVV17R6NGj9cMPP+iOO+7w2u7dd9+tHj166G9/+5uKioqUm5urjIwMrV+/Xqeffno4SgVgM3fffbf69Omjv/3tbyouLtadd96p7Oxsff7556pXr56n3a5du/Sb3/xGd9xxhx5++GHFxMSotLRU/fv3144dO3T33XerS5cu+ve//63Jkydr06ZN+vDDD+VwOCRJ33zzjXJycjyT83/961966KGH9MUXX+iFF17w7CcvL095eXm67rrrdMUVV2j79u264YYbVF5ervbt23vaPfroo8rNzdU999yjfv36ye1264svvtD+/fvr7LEDUPe+/vprSUev5Pnyyy91+PBhXXLJJbrxxht111136ciRIzp06JAGDBigb775Rnl5eerSpYtWrFihKVOmaMOGDV4nRUaPHq1XXnlF1113ne6//37FxsZq3bp12rp1q6fNww8/rHvuuUdjxozRPffco8OHD+tPf/qT+vbtq3/+8586++yzJUlDhgxReXm5Hn30UbVs2VKFhYVatWqVJ5e2bt2qoUOHqm/fvnrhhRd0yimn6Pvvv9f777+vw4cPKz4+XhUVFbr00ku1YsUK3XHHHerdu7e+++473XfffcrIyNDatWvVoEEDn7aFCGIAmJkzZxpJZs2aNdXe37NnT9O0aVNz4MABz7IjR46YTp06mRYtWpiKigpjjDFXXXWVcblcZtu2bV7rZ2Vlmfj4eLN//35jjDFLliwxkkyPHj086xpjzNatW43T6TTXX399bZcIwIZGjRplEhISqr2vMmeGDBnitfyNN94wkszHH3/sWda/f38jyXz00UdebadMmWJiYmKqZONbb71lJJl333232n2Xl5cbt9ttXnrpJVOvXj3z448/GmOM2bdvn4mLizOXXXaZV/t//OMfRpLp37+/Z9nFF19sunXrduIHAEDEqnzt9cknnxi3220OHDhgFi5caE499VSTmJhodu/ebUaNGmUkmRdeeMFr3enTpxtJ5o033vBa/sgjjxhJZtGiRcYYY5YvX24kmUmTJtXYj23btpn69eub3//+917LDxw4YFJTU82IESOMMcYUFhYaSeaJJ56ocVuV2bhhw4Ya28yePdtIMnPmzPFavmbNGiPJPPvssz5vC5GDy8uBkygpKdHq1at1xRVXqGHDhp7l9erV08iRI7Vjxw7PpZqLFy/WwIEDlZ6e7rWN0aNHq7S0tMqXIOXk5HjOEklSq1at1Lt3by1ZsiSEFQGIJpdcconX7S5dukg6eunmsRo1aqQLL7zQa9nChQvVqVMndevWTUeOHPH8Gzx4sOdb0iutX79el1xyiVJSUlSvXj05nU5dc801Ki8v15dffinp6BfBHTp0qMrnNHv37q1WrVp5LTvvvPP0r3/9SzfddJM++OADFRcXB/U4ALCmnj17yul0KjExURdffLFSU1P13nvvqVmzZp42l19+udc6ixcvVkJCgq644gqv5aNHj5YkffTRR5Lk+ejK2LFja9z/Bx98oCNHjuiaa67xyrm4uDj179/fk3ONGzdW27Zt9ac//UmPPfaY1q9fr4qKCq9tdevWTbGxsfq///s/vfjii/r222+r7G/hwoU65ZRTlJ2d7bW/bt26KTU11bM/X7aFyMGkGziJffv2yRij5s2bV7kvLS1NkrR3717Pf31pVyk1NbVK29TU1CrtACBQKSkpXrddLpck6aeffvJaXl12/fDDD9q4caOcTqfXv8TERBljVFhYKEnatm2b+vbtq++//15PPvmkVqxYoTVr1uiZZ57x2ldlttWUfceaOHGi/vznP+uTTz5RVlaWUlJSNHDgQH7aEbCZl156SWvWrNH69eu1c+dObdy4UX369PHcHx8fr6SkJK919u7dq9TUVK8TF5LUtGlT1a9f35M1//3vf1WvXr1qM6fSDz/8IEk699xzq2Td66+/7sk5h8Ohjz76SIMHD9ajjz6qHj166NRTT9W4ceN04MABSVLbtm314YcfqmnTpho7dqzatm2rtm3ben0XxQ8//KD9+/crNja2yv52797t2Z8v20Lk4DPdwEk0atRIMTEx2rVrV5X7du7cKUlq0qSJpKMvbn1pV2n37t1V2u7evbvKi2QACLXjX7xKRzOrQYMGXp/JPv5+SZo/f75KSko0d+5crzPWx365kPS/NwBqyr7WrVt7btevX18TJkzQhAkTtH//fn344Ye6++67NXjwYG3fvp3PMwI2cdZZZ3m+vbw61WVTSkqKVq9eLWOM1/179uzRkSNHPNl06qmnqry8XLt37672jUXpfzn21ltvVbni5nitWrXS888/L0n68ssv9cYbbyg3N1eHDx/W9OnTJUl9+/ZV3759VV5errVr1+rpp5/W+PHj1axZM1111VVq0qSJUlJS9P7771e7j8TERM//n2xbiByc6QZOIiEhQeeff77mzp3rdWaooqJCr7zyilq0aKF27dpJkgYOHKjFixd7JtmVXnrpJcXHx1f5WZ/Zs2fLGOO5/d1332nVqlXKyMgIXUEA4KOLL75Y33zzjVJSUnTOOedU+Vc5Sa580Vt5Fl06+i3lzz33nNf2evbsqbi4OL366qtey1etWlXlcvdjnXLKKbriiis0duxY/fjjj15fgAQg+gwcOFAHDx7U/PnzvZa/9NJLnvslKSsrS5I0bdq0Grc1ePBg1a9fX9988021OVfTGwLt2rXTPffco86dO2vdunVV7q9Xr57OP/98zxU/lW0uvvhi7d27V+Xl5dXu69gvlDzZthA5ONMNHGPx4sXVvpibMmWKMjMzNWDAAN12222KjY3Vs88+q88++0yzZ8/2vOC87777tHDhQg0YMECTJ09W48aN9eqrr+qdd97Ro48+quTkZK/t7tmzR5dddpluuOEGFRUV6b777lNcXJwmTpxYF+UCwAmNHz9ec+bMUb9+/XTrrbeqS5cuqqio0LZt27Ro0SL94Q9/0Pnnn6/MzEzFxsbq6quv1h133KFDhw5p2rRp2rdvn9f2GjVqpNtuu00PPvigrr/+eg0fPlzbt29Xbm5ulcs/s7OzPb/fe+qpp+q7777TE088oVatWunMM8+sy4cBgMVcc801euaZZzRq1Cht3bpVnTt31sqVK/Xwww9ryJAhuuiiiyQdPVM8cuRIPfjgg/rhhx908cUXy+Vyaf369YqPj9fvf/97tW7dWvfff78mTZqkb7/9Vr/85S/VqFEj/fDDD/rnP/+phIQE5eXlaePGjbr55ps1fPhwnXnmmYqNjdXixYu1ceNG3XXXXZKk6dOna/HixRo6dKhatmypQ4cOea4UquzTVVddpVdffVVDhgzRLbfcovPOO09Op1M7duzQkiVLdOmll+qyyy7zaVuIIGH9GjfAIiq/QbOmf1u2bDErVqwwF154oUlISDANGjQwPXv2NAsWLKiyrU2bNpns7GyTnJxsYmNjTdeuXc3MmTO92lR+q/DLL79sxo0bZ0499VTjcrlM3759zdq1a+uoagCRzpdvL3/zzTe9lm/ZssVI8sql/v37m44dO1a7nYMHD5p77rnHtG/f3sTGxprk5GTTuXNnc+utt5rdu3d72i1YsMB07drVxMXFmdNOO83cfvvt5r333jOSzJIlSzztKioqzJQpU0x6erqJjY01Xbp0MQsWLDD9+/f3+vbyv/zlL6Z3796mSZMmJjY21rRs2dJcd911ZuvWrf4/UAAs52S/HGPMiTNu79695re//a1p3ry5qV+/vmnVqpWZOHGiOXTokFe78vJy8/jjj5tOnTp5MqxXr15VXsPNnz/fDBgwwCQlJRmXy2VatWplrrjiCvPhhx8aY4z54YcfzOjRo02HDh1MQkKCadiwoenSpYt5/PHHzZEjR4wxxnz88cfmsssuM61atTIul8ukpKSY/v37m7fffttrX2632/z5z3/2ZGbDhg1Nhw4dzI033mi++uorv7aFyOAw5phrWwHUiaVLl2rAgAF68803q3zzJgAAAAD74DPdAAAAAACECJNuAAAAAABChMvLAQAAAAAIEc50AwAAAAAQIky6AQAAAAAIESbdAAAAAACESP1wd8DKKioqtHPnTiUmJsrhcIS7OwBsxBijAwcOKC0tTTEx4Xv/k5wDECrkHAC78zXnmHSfwM6dO5Wenh7ubgCwse3bt6tFixZh2z85ByDUyDkAdneynGPSfQKJiYmSjj6ISUlJPq3jdru1aNEiDRo0SE6nM5TdCzm71GKXOiRqsapAaikuLlZ6eronZ8KFnKMWq7FLHRK1kHPWQC3WRC3WE8qcY9J9ApWXICUlJfkV0vHx8er92McqK4/sS5hc9YwePS/ya7FLHRK1WFVlLUlJSX7/sQn3pY7kXOQdh1v/OLTa5ZXjEshxaCV2qUOilkrkXHhFWs7VlHESzymrskstocy5qPsitdatW+uJJ54IdzcAAAAAAFEgbJNuh8Nxwn+jR48+6frz58+vk74CAAAAABCIsF1e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sSPnrDcm5FztjQuT7gA888wzplWrViY2Ntb06NHD66vmR40aZfr37+/VfunSpaZ79+4mNjbWtG7d2kybNq2Oe1w9f+p45JFHTNu2bU1cXJxp1KiRueCCC8w777wThl5XVfl1/sf/GzVqlDEmssbE31qsOi7V1SDJzJw509MmUsYlkFqsOi7+sEvOGWOPrCPnrDcm5Jw1x8Uf5Jy1xo6cs96YkHO1Ny6OnzsBAAAAAABqGZ/pBgAAAAAgRJh0AwAAAAAQIky6AQAAAAAIESbdAAAAAACECJNuAAAAAABChEk3AAAAAAAhwqQbAAAAAIAQYdINAAAAAECIMOlG1Fq6dKkcDof2799f69vOyMjQ+PHja327AOAPcg6A3ZFziAT1w90BwI7mzp0rp9MZ7m7UKDc3V/Pnz9eGDRtqZXujR4/W/v37NX/+/FrZHgDrI+cA2B05h9rCpBsIgcaNG4e7C3WivLxcDocj3N0AEAbkHAC7I+dQW7i8HLXirbfeUufOndWgQQOlpKTooosuUklJief+mTNn6qyzzlJcXJw6dOigZ5991mv9HTt26KqrrlLjxo2VkJCgc845R6tXr/bcP23aNLVt21axsbFq3769Xn75Za/1HQ6H/va3v+myyy5TfHy8zjzzTL399ttebd599121a9dODRo00IABA7R161av+7/77jtlZ2erUaNGSkhIUMeOHfXuu+/WWPOzzz6rM888U3FxcWrWrJmuuOIKz33HX47UunVrPfzww7r22muVmJioli1basaMGX49BgsWLNAvfvELxcXF6fTTT1deXp6OHDlSY/+WLl2q8847TwkJCTrllFPUp08ffffdd5o1a5by8vL0r3/9Sw6HQw6HQ7NmzZIkPfbYY+rcubMSEhKUnp6um266SQcPHvRsc9asWTrllFO0cOFCnX322XK5XBozZoxefPFF/f3vf/dsb+nSpTX2C4hU5Bw5R87B7sg5co6cCxEDBGnnzp2mfv365rHHHjNbtmwxGzduNM8884w5cOCAMcaYGTNmmObNm5s5c+aYb7/91syZM8c0btzYzJo1yxhjzIEDB8zpp59u+vbta1asWGG++uor8/rrr5tVq1YZY4yZO3eucTqd5plnnjGbN282f/nLX0y9evXM4sWLPX2QZFq0aGHy8/PNV199ZcaNG2caNmxo9u7da4wxZtu2bcblcplbbrnFfPHFF+aVV14xzZo1M5LMvn37jDHGDB061GRmZpqNGzeab775xixYsMAsW7as2prXrFlj6tWrZ/Lz883WrVvNunXrzJNPPum5v3///uaWW27x3G7VqpVp3LixeeaZZ8xXX31lpkyZYmJiYsznn3/u02Pw/vvvm6SkJDNr1izzzTffmEWLFpnWrVub3NzcavvndrtNcnKyue2228zXX39t/vOf/5hZs2aZ7777zpSWlpo//OEPpmPHjmbXrl1m165dprS01BhjzOOPP24WL15svv32W/PRRx+Z9u3bm9/97nee7c6cOdM4nU7Tu3dv849//MN88cUXZv/+/WbEiBHml7/8pWd7ZWVlvh08QIQg58g5cg52R86Rc+Rc6DDpRtA+/fRTI8ls3bq12vvT09NNfn6+17IHHnjA9OrVyxhjzF//+leTmJjoCdTj9e7d29xwww1ey4YPH26GDBniuS3J3HPPPZ7bBw8eNA6Hw7z33nvGGGMmTpxozjrrLFNRUeFpc+edd3qFdOfOnWsMvePNmTPHJCUlmeLi4mrvry6kf/Ob33huV1RUmKZNm5pp06YZY07+GPTt29c8/PDDXstefvll07x582rb792710gyS5curfb+++67z3Tt2rWm8jzeeOMNk5KS4rk9c+ZMI8ls2LDBq92oUaPMpZdeetLtAZGKnKuKnAPshZyripxDbeHycgSta9euGjhwoDp37qzhw4frueee0759+yRJ//3vf7V9+3Zdd911atiwoeffgw8+qG+++UaStGHDBnXv3r3Gz818/vnn6tOnj9eyPn366PPPP/da1qVLF8//JyQkKDExUXv27PFso2fPnl6fV+nVq5fX+uPGjdODDz6oPn366L777tPGjRtrrDkzM1OtWrXS6aefrpEjR+rVV19VaWnpCR+nY/vncDiUmprq6d/JHoNPP/1U999/v9djeMMNN2jXrl3V7rdx48YaPXq0Bg8erOzsbD355JPatWvXCfsnSUuWLFFmZqZOO+00JSYm6pprrtHevXu9Li2LjY31qgWIBuQcOQfYHTlHziF0mHQjaPXq1VNBQYHee+89nX322Xr66afVvn17bdmyRRUVFZKk5557Ths2bPD8++yzz/TJJ59Ikho0aHDSfRz/5Q7GmCrLjv92SYfD4dm/Meak+7j++uv17bffauTIkdq0aZPOOeccPf3009W2TUxM1Lp16zR79mw1b95ckydPVteuXU/4cxUn6t/JHoOKigrl5eV5PYabNm3SV199pbi4uGrXmTlzpj7++GP17t1br7/+utq1a+d5zKvz3XffaciQIerUqZPmzJmjTz/9VM8884wkye12e9o1aNCAL9tA1CHnyDnA7sg5cg6hw6QbtcLhcKhPnz7Ky8vT+vXrFRsbq3nz5qlZs2Y67bTT9O233+qMM87w+temTRtJR98x3LBhg3788cdqt33WWWdp5cqVXstWrVqls846y+f+nX322VUCqrrASk9P129/+1vNnTtXf/jDH/Tcc8/VuM369evroosu0qOPPqqNGzdq69atWrx4sc99OtbJHoMePXpo8+bNVR7DM844QzExNT+Nu3fvrokTJ2rVqlXq1KmT8vPzJR19d7O8vNyr7dq1a3XkyBH95S9/Uc+ePdWuXTvt3LnTp/5Xtz3Absg5co6cg92Rc+QcORca/GQYgrZ69Wp99NFHGjRokJo2barVq1frv//9rydEc3NzNW7cOCUlJSkrK0tlZWVau3at9u3bpwkTJujqq6/Www8/rGHDhmnKlClq3ry51q9fr7S0NPXq1Uu33367RowYoR49emjgwIFasGCB5s6dqw8//NDnPv72t7/VX/7yF02YMEE33nijPv30U883PFYaP368srKy1K5dO+3bt0+LFy+u8Q/BwoUL9e2336pfv35q1KiR3n33XVVUVKh9+/YBPYYnewwmT56siy++WOnp6Ro+fLhiYmK0ceNGbdq0SQ8++GCV7W3ZskUzZszQJZdcorS0NG3evFlffvmlrrnmGklHv31zy5Yt2rBhg1q0aKHExES1bdtWR44c0dNPP63s7Gz94x//0PTp033qf+vWrfXBBx9o8+bNSklJUXJysqV/1xLwFzlHzpFzsDtyjpwj50IonB8ohz385z//MYMHDzannnqqcblcpl27dubpp5/2avPqq6+abt26mdjYWNOoUSPTr18/M3fuXM/9W7duNZdffrlJSkoy8fHx5pxzzjGrV6/23P/ss8+a008/3TidTtOuXTvz0ksveW1fkpk3b57XsuTkZDNz5kzP7QULFpgzzjjDuFwu07dvX/PCCy94ffHGzTffbNq2bWtcLpc59dRTzciRI01hYWG1Na9YscL079/fNGrUyDRo0MB06dLFvP766577q/vijccff9xrG127djX33Xefz4/B+++/b3r37m0aNGhgkpKSzHnnnWdmzJhRbf92795thg0bZpo3b25iY2NNq1atzOTJk015ebkxxphDhw6Zyy+/3JxyyilGkudxeuyxx0zz5s1NgwYNzODBg81LL73k9RjNnDnTJCcnV9nfnj17TGZmpmnYsKGRZJYsWVJtv4BIRc6Rc+Qc7I6cI+fIudBxGOPDhyMAAAAAAIDf+Ew3AAAAAAAhwqQbAAAAAIAQYdINAAAAAECIMOkGAAAAACBEmHQDAAAAABAiTLoBAAAAAAgRJt0AAAAAAIQIk24AAAAAAEKESTcAAAAAACHCpBsAAAAAgBBh0g0AAAAAQIgw6QYAAAAAIET+H2CQ6vr7rywiAAAAAElFTkSuQmCC\n", | |
| "text/plain": [ | |
| "<Figure size 1000x400 with 3 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, axes = plot_all(sync_load_csv_times, threads_load_csv_times, processes_load_csv_times,\n", | |
| " title='Loading CSVs', figsize=(10,4))\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "py37_pytorch3", | |
| "language": "python", | |
| "name": "conda-env-py37_pytorch3-py" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.7.9" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment