Multiprocessing:-
The multiprocessing module uses a process that runs on separate memory space. Due to this, it is harder to share objects between process and multiprocessing.
Pros:-
Its code is usually straightforward.
It takes advantage of multiple CPUs & cores
Avoids GIL limitations for CPython
Here we can interrupt/kill the Child processes.
Python multiprocessing module has very useful abstractions with an interface much like threading.
Cons:-
IPC a little more complicated with more overhead (communication model vs. shared memory/objects)
Larger memory footprint(it uses more amount of main memory space).
Threading:-
The threading module uses thread (A thread is an entity within a process that can be scheduled for execution. Also, it is the smallest unit of processing that can be performed in an Operating System).
Since threads use the same memory space(amount of memory assigned to any program by CPU), precautions have to be there because both the threads will write to the same memory at the same time. For this, we have the global interpreter lock.
Pros:-
It is lightweight - low memory footprint(it uses less amount of main memory).
As it has shared memory that makes access to one state from others is easy.
It also allows you to easily make responsive UIs.
Cons:-
CPython - subject to the GIL.
It is not interruptible/killable.