Вот между процессами есть IPC, inter-process communication, там множество разных примитивов под разные задачи. Потоки отличаются от процессов тем, что работают в одном пространстве памяти, но всё же требуют определённой синхронизации. Так уж вышло, что в питоне нет полноценной синхронизации между потоками, поэтому из-за GIL выполнять питонный код (вот тут внимательно прочитать надо) может только один из потоков.