Skip to content

Instantly share code, notes, and snippets.

@switchswap
Last active October 25, 2020 06:34
Show Gist options
  • Save switchswap/d37ced48c1f7a852e8801df21ed17529 to your computer and use it in GitHub Desktop.
Save switchswap/d37ced48c1f7a852e8801df21ed17529 to your computer and use it in GitHub Desktop.
CPU Scheduler Gantt Chart Creator
import re
import random
import numpy as np
import matplotlib.pyplot as plt
input_filename = "data.txt"
output_filename = "output.png"
procs = []
proc_num = 0
class Proc:
def __init__(self, name, data):
global proc_num
self.priority = []
self.start_tick = []
self.duration = []
self.name = name
self.color = ""
# Get random color data
random.seed(proc_num + 14) # + 14 looked better
self.color = f"#{random.randrange(0x1000000):06x}"
proc_num = proc_num + 1
# Parse data
# entry = [start, duration, priority]
for entry in data:
self.priority.append(entry[2])
self.start_tick.append(entry[0])
self.duration.append(entry[1])
# Open and parse file
file = open(input_filename, 'r')
lines = file.readlines()
processes = {}
print("Parsing data...")
process_name = ""
process_data = []
for line in lines:
if "name" in line.lower():
if process_name != "" and len(process_data) != 0:
processes[process_name] = process_data
process_name = ""
process_data = []
process_name = line
elif "start" in line.lower():
nums = [int(s) for s in re.findall(r"\b\d+\b", line)]
process_data.append(nums)
# Add last bit of data
processes[process_name] = process_data
print("Parsing completed.")
# Parse output into internal data structure
print("Generating internal data structures...")
for proc in processes:
procs.append(Proc(proc, processes[proc]))
# Graph
print("Generating graph image...")
plt.figure(figsize=(20, 10))
fig, ax = plt.subplots()
ax.grid(True)
for proc in procs:
for i in range(len(proc.priority)):
ax.broken_barh([(proc.start_tick[i], proc.duration[i])],
(proc.priority[i], 1),
facecolors=proc.color)
ax.set_ylabel('Priority')
ax.set_xlabel('Ticks')
ax.set_ylim(0, 3)
ax.set_yticklabels(("Q0", "Q1", "Q2"))
ax.set_yticks(np.arange(3))
ax.invert_yaxis()
ax.legend([proc.name for proc in procs], loc='center left', bbox_to_anchor=(1.0, 0.5),
labelcolor=[proc.color for proc in procs])
leg = ax.get_legend()
for i in range(len(leg.legendHandles)):
leg.legendHandles[i].set_color(procs[i].color)
plt.tight_layout()
plt.savefig(output_filename, dpi=1000) # High dpi since there are lot of ticks
print("Image generated!")
Counter = 1073741825
name= test2, pid= 7
Number of last used ticks in respective queue = {0, 0, 2}
Number of times scheduled in respective queue = {17, 17, 49}
**************************************************
Start: 453, Duration: 1, Priority: 0
Start: 454, Duration: 2, Priority: 1
Start: 494, Duration: 8, Priority: 2
Start: 540, Duration: 8, Priority: 2
Start: 586, Duration: 8, Priority: 2
Start: 637, Duration: 1, Priority: 0
Start: 638, Duration: 2, Priority: 1
Start: 683, Duration: 8, Priority: 2
Start: 734, Duration: 1, Priority: 0
Start: 735, Duration: 2, Priority: 1
Start: 780, Duration: 8, Priority: 2
Start: 826, Duration: 8, Priority: 2
Start: 872, Duration: 8, Priority: 2
Start: 918, Duration: 8, Priority: 2
Start: 964, Duration: 8, Priority: 2
Start: 1015, Duration: 1, Priority: 0
Start: 1016, Duration: 2, Priority: 1
Start: 1061, Duration: 8, Priority: 2
Start: 1112, Duration: 1, Priority: 0
Start: 1113, Duration: 2, Priority: 1
Start: 1158, Duration: 8, Priority: 2
Start: 1204, Duration: 8, Priority: 2
Start: 1250, Duration: 8, Priority: 2
Start: 1296, Duration: 8, Priority: 2
Start: 1342, Duration: 8, Priority: 2
Start: 1393, Duration: 1, Priority: 0
Start: 1394, Duration: 2, Priority: 1
Start: 1439, Duration: 8, Priority: 2
Start: 1490, Duration: 1, Priority: 0
Start: 1491, Duration: 2, Priority: 1
Start: 1536, Duration: 8, Priority: 2
Start: 1582, Duration: 8, Priority: 2
Start: 1628, Duration: 8, Priority: 2
Start: 1674, Duration: 8, Priority: 2
Start: 1720, Duration: 8, Priority: 2
Start: 1771, Duration: 1, Priority: 0
Start: 1772, Duration: 2, Priority: 1
Start: 1817, Duration: 8, Priority: 2
Start: 1868, Duration: 1, Priority: 0
Start: 1869, Duration: 2, Priority: 1
Start: 1914, Duration: 8, Priority: 2
Start: 1960, Duration: 8, Priority: 2
Start: 2006, Duration: 8, Priority: 2
Start: 2052, Duration: 8, Priority: 2
Start: 2098, Duration: 8, Priority: 2
Start: 2149, Duration: 1, Priority: 0
Start: 2150, Duration: 2, Priority: 1
Start: 2195, Duration: 8, Priority: 2
Start: 2246, Duration: 1, Priority: 0
Start: 2247, Duration: 2, Priority: 1
Start: 2292, Duration: 8, Priority: 2
Start: 2338, Duration: 8, Priority: 2
Start: 2384, Duration: 8, Priority: 2
Start: 2430, Duration: 8, Priority: 2
Start: 2476, Duration: 8, Priority: 2
Start: 2527, Duration: 1, Priority: 0
Start: 2528, Duration: 2, Priority: 1
Start: 2573, Duration: 8, Priority: 2
Start: 2624, Duration: 1, Priority: 0
Start: 2625, Duration: 2, Priority: 1
Start: 2670, Duration: 8, Priority: 2
Start: 2716, Duration: 8, Priority: 2
Start: 2762, Duration: 8, Priority: 2
Start: 2808, Duration: 8, Priority: 2
Start: 2854, Duration: 8, Priority: 2
Start: 2905, Duration: 1, Priority: 0
Start: 2906, Duration: 2, Priority: 1
Start: 2951, Duration: 8, Priority: 2
Start: 3002, Duration: 1, Priority: 0
Start: 3003, Duration: 2, Priority: 1
Start: 3048, Duration: 8, Priority: 2
Start: 3094, Duration: 8, Priority: 2
Start: 3140, Duration: 8, Priority: 2
Start: 3186, Duration: 8, Priority: 2
Start: 3232, Duration: 8, Priority: 2
Start: 3283, Duration: 1, Priority: 0
Start: 3284, Duration: 2, Priority: 1
Start: 3329, Duration: 8, Priority: 2
Start: 3380, Duration: 1, Priority: 0
Start: 3381, Duration: 2, Priority: 1
Start: 3426, Duration: 8, Priority: 2
Start: 3465, Duration: 8, Priority: 2
Start: 3508, Duration: 8, Priority: 2
name= test2, pid= 3
Number of last used ticks in respective queue = {0, 0, 3}
Number of times scheduled in respective queue = {17, 23, 56}
**************************************************
Start: 409, Duration: 1, Priority: 0
Start: 410, Duration: 0, Priority: 1
Start: 410, Duration: 0, Priority: 1
Start: 410, Duration: 0, Priority: 1
Start: 410, Duration: 0, Priority: 1
Start: 410, Duration: 0, Priority: 1
Start: 410, Duration: 0, Priority: 1
Start: 410, Duration: 2, Priority: 1
Start: 412, Duration: 8, Priority: 2
Start: 423, Duration: 8, Priority: 2
Start: 445, Duration: 8, Priority: 2
Start: 486, Duration: 8, Priority: 2
Start: 532, Duration: 8, Priority: 2
Start: 583, Duration: 1, Priority: 0
Start: 584, Duration: 2, Priority: 1
Start: 629, Duration: 8, Priority: 2
Start: 680, Duration: 1, Priority: 0
Start: 681, Duration: 2, Priority: 1
Start: 726, Duration: 8, Priority: 2
Start: 772, Duration: 8, Priority: 2
Start: 818, Duration: 8, Priority: 2
Start: 864, Duration: 8, Priority: 2
Start: 910, Duration: 8, Priority: 2
Start: 961, Duration: 1, Priority: 0
Start: 962, Duration: 2, Priority: 1
Start: 1007, Duration: 8, Priority: 2
Start: 1058, Duration: 1, Priority: 0
Start: 1059, Duration: 2, Priority: 1
Start: 1104, Duration: 8, Priority: 2
Start: 1150, Duration: 8, Priority: 2
Start: 1196, Duration: 8, Priority: 2
Start: 1242, Duration: 8, Priority: 2
Start: 1288, Duration: 8, Priority: 2
Start: 1339, Duration: 1, Priority: 0
Start: 1340, Duration: 2, Priority: 1
Start: 1385, Duration: 8, Priority: 2
Start: 1436, Duration: 1, Priority: 0
Start: 1437, Duration: 2, Priority: 1
Start: 1482, Duration: 8, Priority: 2
Start: 1528, Duration: 8, Priority: 2
Start: 1574, Duration: 8, Priority: 2
Start: 1620, Duration: 8, Priority: 2
Start: 1666, Duration: 8, Priority: 2
Start: 1717, Duration: 1, Priority: 0
Start: 1718, Duration: 2, Priority: 1
Start: 1763, Duration: 8, Priority: 2
Start: 1814, Duration: 1, Priority: 0
Start: 1815, Duration: 2, Priority: 1
Start: 1860, Duration: 8, Priority: 2
Start: 1906, Duration: 8, Priority: 2
Start: 1952, Duration: 8, Priority: 2
Start: 1998, Duration: 8, Priority: 2
Start: 2044, Duration: 8, Priority: 2
Start: 2095, Duration: 1, Priority: 0
Start: 2096, Duration: 2, Priority: 1
Start: 2141, Duration: 8, Priority: 2
Start: 2192, Duration: 1, Priority: 0
Start: 2193, Duration: 2, Priority: 1
Start: 2238, Duration: 8, Priority: 2
Start: 2284, Duration: 8, Priority: 2
Start: 2330, Duration: 8, Priority: 2
Start: 2376, Duration: 8, Priority: 2
Start: 2422, Duration: 8, Priority: 2
Start: 2473, Duration: 1, Priority: 0
Start: 2474, Duration: 2, Priority: 1
Start: 2519, Duration: 8, Priority: 2
Start: 2570, Duration: 1, Priority: 0
Start: 2571, Duration: 2, Priority: 1
Start: 2616, Duration: 8, Priority: 2
Start: 2662, Duration: 8, Priority: 2
Start: 2708, Duration: 8, Priority: 2
Start: 2754, Duration: 8, Priority: 2
Start: 2800, Duration: 8, Priority: 2
Start: 2851, Duration: 1, Priority: 0
Start: 2852, Duration: 2, Priority: 1
Start: 2897, Duration: 8, Priority: 2
Start: 2948, Duration: 1, Priority: 0
Start: 2949, Duration: 2, Priority: 1
Start: 2994, Duration: 8, Priority: 2
Start: 3040, Duration: 8, Priority: 2
Start: 3086, Duration: 8, Priority: 2
Start: 3132, Duration: 8, Priority: 2
Start: 3178, Duration: 8, Priority: 2
Start: 3229, Duration: 1, Priority: 0
Start: 3230, Duration: 2, Priority: 1
Start: 3275, Duration: 8, Priority: 2
Start: 3326, Duration: 1, Priority: 0
Start: 3327, Duration: 2, Priority: 1
Start: 3372, Duration: 8, Priority: 2
Start: 3418, Duration: 8, Priority: 2
Start: 3464, Duration: 1, Priority: 2
Start: 3492, Duration: 0, Priority: 2
Start: 3519, Duration: 0, Priority: 2
Start: 3540, Duration: 0, Priority: 2
Start: 3543, Duration: 0, Priority: 2
Start: 3543, Duration: 0, Priority: 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment