Created
April 30, 2021 10:01
-
-
Save crusaderky/c1ccf5fd0107b13c8d24bbed5197d5f6 to your computer and use it in GitHub Desktop.
O(1) rebalance
This file contains 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": "code", | |
"execution_count": 1, | |
"id": "limiting-regression", | |
"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:42153</li>\n", | |
" <li><b>Dashboard: </b><a href='http://127.0.0.1:8787/status' target='_blank'>http://127.0.0.1:8787/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>32</li>\n", | |
" <li><b>Cores: </b>128</li>\n", | |
" <li><b>Memory: </b>64.00 GiB</li>\n", | |
"</ul>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<Client: 'tcp://127.0.0.1:42153' processes=32 threads=128, memory=64.00 GiB>" | |
] | |
}, | |
"execution_count": 1, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"import threading\n", | |
"import time\n", | |
"\n", | |
"import distributed\n", | |
"import numpy\n", | |
"import pandas\n", | |
"\n", | |
"# This requires 64 GiB RAM on the host\n", | |
"n_workers = 32\n", | |
"client = distributed.Client(\n", | |
" n_workers=n_workers, threads_per_worker=4, memory_limit=\"2 GiB\"\n", | |
")\n", | |
"client.wait_for_workers(n_workers)\n", | |
"scheduler = client.cluster.scheduler\n", | |
"workers = scheduler._workers_dv.values()\n", | |
"assert len(workers) == n_workers\n", | |
"client" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "unavailable-skiing", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Load the cluster with N keys, S bytes per key, triangular distribution\n", | |
"N = 10_000\n", | |
"S = 2 * 2 ** 20\n", | |
"# N = 100_000\n", | |
"# S = 160 * 1024\n", | |
"\n", | |
"# Don't have more than this many running futures to avoid crashing the scheduler\n", | |
"sem = threading.Semaphore(4000)\n", | |
"\n", | |
"tasks_to_do = {w: i * N // sum(range(n_workers)) for i, w in enumerate(workers)}\n", | |
"\n", | |
"futures = []\n", | |
"while tasks_to_do:\n", | |
" for w, n in list(tasks_to_do.items()):\n", | |
" if not n:\n", | |
" del tasks_to_do[w]\n", | |
" continue\n", | |
"\n", | |
" sem.acquire()\n", | |
" f = client.submit(numpy.random.random, S // 8, workers=[w.address], pure=False)\n", | |
" f.add_done_callback(lambda _: sem.release())\n", | |
" futures.append(f)\n", | |
" tasks_to_do[w] -= 1\n", | |
" \n", | |
"time.sleep(4)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "contained-oxide", | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"1800 messages defined in 5105us\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>sending</th>\n", | |
" <th>receiving</th>\n", | |
" <th>has</th>\n", | |
" <th>will have</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:32909</th>\n", | |
" <td>0</td>\n", | |
" <td>256</td>\n", | |
" <td>0</td>\n", | |
" <td>256</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:33525</th>\n", | |
" <td>0</td>\n", | |
" <td>236</td>\n", | |
" <td>20</td>\n", | |
" <td>256</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:33777</th>\n", | |
" <td>0</td>\n", | |
" <td>216</td>\n", | |
" <td>40</td>\n", | |
" <td>256</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:34323</th>\n", | |
" <td>0</td>\n", | |
" <td>197</td>\n", | |
" <td>60</td>\n", | |
" <td>257</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:34719</th>\n", | |
" <td>0</td>\n", | |
" <td>176</td>\n", | |
" <td>80</td>\n", | |
" <td>256</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:34827</th>\n", | |
" <td>0</td>\n", | |
" <td>159</td>\n", | |
" <td>100</td>\n", | |
" <td>259</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:35315</th>\n", | |
" <td>0</td>\n", | |
" <td>136</td>\n", | |
" <td>120</td>\n", | |
" <td>256</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:35501</th>\n", | |
" <td>0</td>\n", | |
" <td>132</td>\n", | |
" <td>141</td>\n", | |
" <td>273</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:37059</th>\n", | |
" <td>0</td>\n", | |
" <td>108</td>\n", | |
" <td>161</td>\n", | |
" <td>269</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:37129</th>\n", | |
" <td>0</td>\n", | |
" <td>75</td>\n", | |
" <td>181</td>\n", | |
" <td>256</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:37235</th>\n", | |
" <td>0</td>\n", | |
" <td>55</td>\n", | |
" <td>201</td>\n", | |
" <td>256</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:37585</th>\n", | |
" <td>0</td>\n", | |
" <td>37</td>\n", | |
" <td>221</td>\n", | |
" <td>258</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:37809</th>\n", | |
" <td>0</td>\n", | |
" <td>17</td>\n", | |
" <td>241</td>\n", | |
" <td>258</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:38253</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>262</td>\n", | |
" <td>262</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:38735</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>282</td>\n", | |
" <td>282</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:38837</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>302</td>\n", | |
" <td>302</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:39569</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>322</td>\n", | |
" <td>322</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:39821</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>342</td>\n", | |
" <td>342</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:39899</th>\n", | |
" <td>1</td>\n", | |
" <td>0</td>\n", | |
" <td>362</td>\n", | |
" <td>361</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:40983</th>\n", | |
" <td>25</td>\n", | |
" <td>0</td>\n", | |
" <td>383</td>\n", | |
" <td>358</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:41113</th>\n", | |
" <td>32</td>\n", | |
" <td>0</td>\n", | |
" <td>403</td>\n", | |
" <td>371</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:41239</th>\n", | |
" <td>65</td>\n", | |
" <td>0</td>\n", | |
" <td>423</td>\n", | |
" <td>358</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:42831</th>\n", | |
" <td>79</td>\n", | |
" <td>0</td>\n", | |
" <td>443</td>\n", | |
" <td>364</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:42833</th>\n", | |
" <td>101</td>\n", | |
" <td>0</td>\n", | |
" <td>463</td>\n", | |
" <td>362</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:42937</th>\n", | |
" <td>112</td>\n", | |
" <td>0</td>\n", | |
" <td>483</td>\n", | |
" <td>371</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:44579</th>\n", | |
" <td>146</td>\n", | |
" <td>0</td>\n", | |
" <td>504</td>\n", | |
" <td>358</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:45365</th>\n", | |
" <td>148</td>\n", | |
" <td>0</td>\n", | |
" <td>524</td>\n", | |
" <td>376</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:45413</th>\n", | |
" <td>177</td>\n", | |
" <td>0</td>\n", | |
" <td>544</td>\n", | |
" <td>367</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:45763</th>\n", | |
" <td>204</td>\n", | |
" <td>0</td>\n", | |
" <td>564</td>\n", | |
" <td>360</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:45941</th>\n", | |
" <td>226</td>\n", | |
" <td>0</td>\n", | |
" <td>584</td>\n", | |
" <td>358</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:46389</th>\n", | |
" <td>242</td>\n", | |
" <td>0</td>\n", | |
" <td>604</td>\n", | |
" <td>362</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:46509</th>\n", | |
" <td>242</td>\n", | |
" <td>0</td>\n", | |
" <td>625</td>\n", | |
" <td>383</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" sending receiving has will have\n", | |
"tcp://127.0.0.1:32909 0 256 0 256\n", | |
"tcp://127.0.0.1:33525 0 236 20 256\n", | |
"tcp://127.0.0.1:33777 0 216 40 256\n", | |
"tcp://127.0.0.1:34323 0 197 60 257\n", | |
"tcp://127.0.0.1:34719 0 176 80 256\n", | |
"tcp://127.0.0.1:34827 0 159 100 259\n", | |
"tcp://127.0.0.1:35315 0 136 120 256\n", | |
"tcp://127.0.0.1:35501 0 132 141 273\n", | |
"tcp://127.0.0.1:37059 0 108 161 269\n", | |
"tcp://127.0.0.1:37129 0 75 181 256\n", | |
"tcp://127.0.0.1:37235 0 55 201 256\n", | |
"tcp://127.0.0.1:37585 0 37 221 258\n", | |
"tcp://127.0.0.1:37809 0 17 241 258\n", | |
"tcp://127.0.0.1:38253 0 0 262 262\n", | |
"tcp://127.0.0.1:38735 0 0 282 282\n", | |
"tcp://127.0.0.1:38837 0 0 302 302\n", | |
"tcp://127.0.0.1:39569 0 0 322 322\n", | |
"tcp://127.0.0.1:39821 0 0 342 342\n", | |
"tcp://127.0.0.1:39899 1 0 362 361\n", | |
"tcp://127.0.0.1:40983 25 0 383 358\n", | |
"tcp://127.0.0.1:41113 32 0 403 371\n", | |
"tcp://127.0.0.1:41239 65 0 423 358\n", | |
"tcp://127.0.0.1:42831 79 0 443 364\n", | |
"tcp://127.0.0.1:42833 101 0 463 362\n", | |
"tcp://127.0.0.1:42937 112 0 483 371\n", | |
"tcp://127.0.0.1:44579 146 0 504 358\n", | |
"tcp://127.0.0.1:45365 148 0 524 376\n", | |
"tcp://127.0.0.1:45413 177 0 544 367\n", | |
"tcp://127.0.0.1:45763 204 0 564 360\n", | |
"tcp://127.0.0.1:45941 226 0 584 358\n", | |
"tcp://127.0.0.1:46389 242 0 604 362\n", | |
"tcp://127.0.0.1:46509 242 0 625 383" | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"def rebalance_report():\n", | |
" t0 = time.time()\n", | |
" msgs = scheduler._rebalance_find_msgs(None, workers)\n", | |
" t1 = time.time()\n", | |
" print(f\"{len(msgs)} messages defined in {(t1 - t0) * 1e6:.0f}us\")\n", | |
" cnt = {w: [0, 0] for w in workers}\n", | |
" for s, r, _ in msgs:\n", | |
" cnt[s][0] += 1\n", | |
" cnt[r][1] += 1\n", | |
" df = pandas.DataFrame(cnt, index=[\"sending\", \"receiving\"]).T\n", | |
" df.index = [w.address for w in df.index]\n", | |
" df[\"has\"] = [len(w._has_what) for w in workers]\n", | |
" df[\"will have\"] = df[\"has\"] - df[\"sending\"] + df[\"receiving\"]\n", | |
" return df\n", | |
"\n", | |
"rebalance_report()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "brave-austin", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 571 ms, sys: 90 ms, total: 661 ms\n", | |
"Wall time: 1.71 s\n", | |
"CPU times: user 1.03 ms, sys: 129 µs, total: 1.16 ms\n", | |
"Wall time: 1.11 ms\n", | |
"CPU times: user 1.39 ms, sys: 0 ns, total: 1.39 ms\n", | |
"Wall time: 1.38 ms\n", | |
"CPU times: user 933 µs, sys: 127 µs, total: 1.06 ms\n", | |
"Wall time: 1.05 ms\n", | |
"CPU times: user 1.17 ms, sys: 168 µs, total: 1.34 ms\n", | |
"Wall time: 1.32 ms\n", | |
"CPU times: user 10.5 ms, sys: 5.2 ms, total: 15.7 ms\n", | |
"Wall time: 43.4 ms\n", | |
"CPU times: user 7.05 ms, sys: 0 ns, total: 7.05 ms\n", | |
"Wall time: 17.4 ms\n", | |
"CPU times: user 7.4 ms, sys: 370 µs, total: 7.77 ms\n", | |
"Wall time: 13 ms\n", | |
"CPU times: user 1.17 ms, sys: 0 ns, total: 1.17 ms\n", | |
"Wall time: 1.16 ms\n", | |
"CPU times: user 0 ns, sys: 1.09 ms, total: 1.09 ms\n", | |
"Wall time: 1.09 ms\n" | |
] | |
} | |
], | |
"source": [ | |
"for _ in range(10):\n", | |
" %time client.rebalance()\n", | |
" time.sleep(4)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "thousand-implementation", | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"0 messages defined in 188us\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>sending</th>\n", | |
" <th>receiving</th>\n", | |
" <th>has</th>\n", | |
" <th>will have</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:32909</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>264</td>\n", | |
" <td>264</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:33525</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>264</td>\n", | |
" <td>264</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:33777</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>262</td>\n", | |
" <td>262</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:34323</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>263</td>\n", | |
" <td>263</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:34719</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>262</td>\n", | |
" <td>262</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:34827</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>262</td>\n", | |
" <td>262</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:35315</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>263</td>\n", | |
" <td>263</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:35501</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>273</td>\n", | |
" <td>273</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:37059</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>274</td>\n", | |
" <td>274</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:37129</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>261</td>\n", | |
" <td>261</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:37235</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>262</td>\n", | |
" <td>262</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:37585</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>263</td>\n", | |
" <td>263</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:37809</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>261</td>\n", | |
" <td>261</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:38253</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>262</td>\n", | |
" <td>262</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:38735</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>282</td>\n", | |
" <td>282</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:38837</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>302</td>\n", | |
" <td>302</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:39569</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>322</td>\n", | |
" <td>322</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:39821</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>342</td>\n", | |
" <td>342</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:39899</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>361</td>\n", | |
" <td>361</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:40983</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>358</td>\n", | |
" <td>358</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:41113</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>362</td>\n", | |
" <td>362</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:41239</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>358</td>\n", | |
" <td>358</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:42831</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>361</td>\n", | |
" <td>361</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:42833</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>362</td>\n", | |
" <td>362</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:42937</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>362</td>\n", | |
" <td>362</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:44579</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>358</td>\n", | |
" <td>358</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:45365</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>361</td>\n", | |
" <td>361</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:45413</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>362</td>\n", | |
" <td>362</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:45763</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>360</td>\n", | |
" <td>360</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:45941</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>358</td>\n", | |
" <td>358</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:46389</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>361</td>\n", | |
" <td>361</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tcp://127.0.0.1:46509</th>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>357</td>\n", | |
" <td>357</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" sending receiving has will have\n", | |
"tcp://127.0.0.1:32909 0 0 264 264\n", | |
"tcp://127.0.0.1:33525 0 0 264 264\n", | |
"tcp://127.0.0.1:33777 0 0 262 262\n", | |
"tcp://127.0.0.1:34323 0 0 263 263\n", | |
"tcp://127.0.0.1:34719 0 0 262 262\n", | |
"tcp://127.0.0.1:34827 0 0 262 262\n", | |
"tcp://127.0.0.1:35315 0 0 263 263\n", | |
"tcp://127.0.0.1:35501 0 0 273 273\n", | |
"tcp://127.0.0.1:37059 0 0 274 274\n", | |
"tcp://127.0.0.1:37129 0 0 261 261\n", | |
"tcp://127.0.0.1:37235 0 0 262 262\n", | |
"tcp://127.0.0.1:37585 0 0 263 263\n", | |
"tcp://127.0.0.1:37809 0 0 261 261\n", | |
"tcp://127.0.0.1:38253 0 0 262 262\n", | |
"tcp://127.0.0.1:38735 0 0 282 282\n", | |
"tcp://127.0.0.1:38837 0 0 302 302\n", | |
"tcp://127.0.0.1:39569 0 0 322 322\n", | |
"tcp://127.0.0.1:39821 0 0 342 342\n", | |
"tcp://127.0.0.1:39899 0 0 361 361\n", | |
"tcp://127.0.0.1:40983 0 0 358 358\n", | |
"tcp://127.0.0.1:41113 0 0 362 362\n", | |
"tcp://127.0.0.1:41239 0 0 358 358\n", | |
"tcp://127.0.0.1:42831 0 0 361 361\n", | |
"tcp://127.0.0.1:42833 0 0 362 362\n", | |
"tcp://127.0.0.1:42937 0 0 362 362\n", | |
"tcp://127.0.0.1:44579 0 0 358 358\n", | |
"tcp://127.0.0.1:45365 0 0 361 361\n", | |
"tcp://127.0.0.1:45413 0 0 362 362\n", | |
"tcp://127.0.0.1:45763 0 0 360 360\n", | |
"tcp://127.0.0.1:45941 0 0 358 358\n", | |
"tcp://127.0.0.1:46389 0 0 361 361\n", | |
"tcp://127.0.0.1:46509 0 0 357 357" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"rebalance_report()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "wicked-chemistry", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"del futures" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "saving-semiconductor", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import gc\n", | |
"\n", | |
"_ = client.run(gc.collect)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "sunset-obligation", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import ctypes\n", | |
"\n", | |
"def trim_memory() -> int:\n", | |
" libc = ctypes.CDLL(\"libc.so.6\")\n", | |
" return libc.malloc_trim(0)\n", | |
"\n", | |
"_ = client.run(trim_memory)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "sunset-compiler", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"2*.3" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "narrow-quebec", | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"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.8.6" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment