繁体   English   中英

python 3中的多处理和多线程

[英]multiprocessing and multithreading in python 3

我知道 python 中有一个 GIL 强制线程仅在 1 个核心上执行。 但是我根据处理器内核的数量创建进程,并在每个进程中创建线程。 理论上,它们会在每个进程中并行执行吗? 如果它有效,我如何在使用 Pool 时同步所有内容

from multiprocessing import Pool
from concurrent.futures import ThreadPoolExecutor

def make_threads(data):
 with ThreadPoolExecutor(len(data)) as executor:
     answer=list(executor.map(some_function,data))
     return answer

def main():
with Pool(processes_count) as p:
         answer=list(p.map(make_threads,data))```

如果可以,请使用 concurrent.futures 而不是多处理或多线程 - 这是一个更好的 API,可让您方便地从线程切换到进程,反之亦然。

在给定的 python 进程中,线程可以很好地完成 I/O 绑定任务,但 CPU 绑定任务很差。 如果你在一个进程中有 20 个 I/O 绑定线程和 1 个 CPU 绑定线程,那么它们都会有性能问题——CPU 绑定线程搞乱了 I/O 绑定线程。

通常,队列是跨进程和线程进行通信的最佳方式。

暂无
暂无

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

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