在 Python 中结合多进程和多线程

Combine multiprocess and multithread in Python

(我不知道是否应该在 SO 或其他 stackexchange 中询问这个问题)

在执行繁重的 I/O 绑定任务时,例如 API 调用或数据库获取,我想知道 Python 是否只使用一个进程进行多线程处理,即我们是否可以创建更多线程通过结合多处理和多线程,就像下面的伪代码

for process in Processes:
    for thread in threads:
        fetch_api_resuls(thread)

或者 Python 会自动执行此操作吗?

我认为这样做没有任何意义:启动一个新的 进程 的成本相对较高,并且启动一个新的 线程 成本相当高。将任务序列化到这些线程或进程再次花费成本,并且同步状态成本......再次。

如果我遇到两组问题,我做什么:

  • I/O 绑定问题(例如通过网络获取数据)
  • CPU 与I/O 绑定问题相关的绑定问题

就是把multiprocessing和asyncio结合起来。这有一个低得多的开销---我们只有 一个 线程,我们只为调度程序付费(但没有序列化),不涉及启动大量进程(每个它使用与父进程一样多的虚拟内存)或线程(每个线程仍然使用相当大的内存块)。

但是,我不会在多处理线程中使用 asyncio——我会在 main 线程中使用 asyncio,并将 cpu 密集型任务卸载到需要时的工作线程池。

我怀疑你可能可以在多处理中使用线程,但它不太可能给你带来任何速度提升。