Process has its own memory space and Python interpreter. Thread shares memory within a process.
1from multiprocessing import Process2import threading34# Process — separate memory5counter = 067def process_worker():8 global counter9 counter += 100 # Each process has its own counter!1011p1 = Process(target=process_worker)12p2 = Process(target=process_worker)13p1.start(); p2.start()14p1.join(); p2.join()15print(counter) # 0 (unchanged!)1617# Thread — shared memory18counter = 019lock = threading.Lock()2021def thread_worker():22 global counter23 with lock:24 counter += 1002526t1 = threading.Thread(target=thread_worker)27t2 = threading.Thread(target=thread_worker)28t1.start(); t2.start()29t1.join(); t2.join()30print(counter) # 200
Comparison: