View output of multiple processes, in parallel, in the console, with an interactive TUI
Project description
multiplex
View output of multiple processes, in parallel, in the console, with an interactive TUI
Examples
Parallel Execution Of Commands
mp \
'./some-long-running-process.py --zone z1' \
'./some-long-running-process.py --zone z2' \
'./some-long-running-process.py --zone z3'
You can achive the same effect using Python API like this:
from multiplex import Multiplex
mp = Multiplex()
for zone in ['z1', 'z2', 'z3']:
mp.add(f"./some-long-running-process.py --zone {zone}")
mp.run()
Dynamically Add Commands
my-script.sh
:
#!/bin/bash -e
echo Hello There
export REPO='git@github.com:dankilman/multiplex.git'
mp 'git clone $REPO'
mp 'pyenv virtualenv 3.8.5 multiplex-demo && pyenv local multiplex-demo'
cd multiplex
mp 'poetry install'
mp 'pytest tests'
mp @ Goodbye -b 0
And then running:
mp ./my-script.sh -b 7
Python Controller
An output similar to the first example can be achieved from a single process using the Python Controller API.
import random
import time
import threading
from multiplex import Multiplex, Controller
CSI = "\033["
RESET = CSI + "0m"
RED = CSI + "31m"
GREEN = CSI + "32m"
BLUE = CSI + "34m"
MAG = CSI + "35m"
CYAN = CSI + "36m"
mp = Multiplex()
controllers = [Controller(f"zone z{i+1}", thread_safe=True) for i in range(3)]
for controller in controllers:
mp.add(controller)
def run(index, c):
c.write(
f"Starting long running process in zone {BLUE}z{index}{RESET}, "
f"that is not really long for demo purposes\n"
)
count1 = count2 = 0
while True:
count1 += random.randint(0, 1000)
count2 += random.randint(0, 1000)
sleep = random.random() * 3
time.sleep(sleep)
c.write(
f"Processed {RED}{count1}{RESET} orders, "
f"total amount: {GREEN}${count2}{RESET}, "
f"Time it took to process this batch: {MAG}{sleep:0.2f}s{RESET}, "
f"Some more random data: {CYAN}{random.randint(500, 600)}{RESET}\n"
)
for index, controller in enumerate(controllers):
thread = threading.Thread(target=run, args=(index+1, controller))
thread.daemon = True
thread.start()
mp.run()
Help Screen
Type ?
to toggle the help screen.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
multiplex-0.2.0.tar.gz
(24.5 kB
view hashes)
Built Distribution
multiplex-0.2.0-py3-none-any.whl
(27.9 kB
view hashes)
Close
Hashes for multiplex-0.2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d36faa6c98cb9c7bbe709b0cbd86ae8b0b393d8e5ff0e8661cc2ed5e8684e34a |
|
MD5 | 0e9346ddf7ba97873dfaa4c3ea459c50 |
|
BLAKE2b-256 | 9401a2aa2bbc76de9e6f7b18c0e303e93db1a308d9ffc1d88511d0fbcc7acdf5 |