繁体   English   中英

在 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 绑定问题(例如通过网络获取数据)
  • 与 I/O 绑定问题相关的 CPU 绑定问题

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM