import os import time import threading from threading import Thread def cpu_waster(i: int) -> None: name = threading.current_thread().getName() print(f"{name} doing {i} work") time.sleep(3) def display_threads() -> None: print("-" * 10) print(f"Current process PID: {os.getpid()}") print(f"Thread Count: {threading.active_count()}") print("Active threads:") for thread in threading.enumerate(): print(thread) def main(num_threads: int) -> None: display_threads() print(f"Starting {num_threads} CPU wasters...") for i in range(num_threads): thread = Thread(target=cpu_waster, args=(i,)) thread.start() display_threads() if __name__ == "__main__": num_threads = 5 main(num_threads)
$ python3 multithreading.py
———-
Current process PID: 580482
Thread Count: 1
Active threads:
<_MainThread(MainThread, started 281472949920800)>
Starting 5 CPU wasters…
Thread-2 (cpu_waster) doing 1 work
Thread-3 (cpu_waster) doing 2 work
Thread-4 (cpu_waster) doing 3 work
/home/vagrant/dev/rust/parallel/python/multithreading.py:7: DeprecationWarning: getName() is deprecated, get the name attribute instead
name = threading.current_thread().getName()
Thread-1 (cpu_waster) doing 0 work
Thread-5 (cpu_waster) doing 4 work
———-
Current process PID: 580482
Thread Count: 6
Active threads:
<_MainThread(MainThread, started 281472949920800)>
うーむ、中々難儀やのう