Auf*_*ind 5 python cpu-usage multiprocessing
我有一个main()处理大量数据的简单函数。由于我有一台带有大量内存的 8 核机器,我建议使用multiprocessingpython 模块来加速处理。每个子流程大约需要 18 小时才能完成。
长话短说,我怀疑我multiprocessing是否正确理解了模块的行为。
我以某种方式启动不同的子流程,如下所示:
def main():
data = huge_amount_of_data().
pool = multiprocessing.Pool(processes=cpu_cores) # cpu_cores is set to 8, since my cpu has 8 cores.
pool.map(start_process, data_chunk) # data_chunk is a subset data.
Run Code Online (Sandbox Code Playgroud)
我理解启动这个脚本是一个自己的过程,即在所有子过程完成后完成的主过程。显然 Main 进程不会消耗太多资源,因为它首先只会准备数据并生成子进程。它也会使用自己的核心吗?意思是只能启动 7 个子进程,而不是我喜欢在上面启动的 8 个子进程?
核心问题是:我可以生成 8 个子进程并确保它们可以正确并行工作吗?
顺便说一下,子进程之间不以任何方式交互,当它们完成时,它们各自生成一个存储结果的 sqlite 数据库文件。所以即使是 result_storage 也是分开处理的。
我想避免的是,我生成了一个会阻碍其他进程全速运行的进程。我需要代码在大约 16 小时内终止,而不是在两倍的时间内终止,因为我有更多的进程而不是内核。:-)
操作系统将控制哪些进程分配给哪个核心,因为还有其他应用程序进程正在运行,您无法保证所有 8 个核心可用于您的应用程序。
主线程会保留自己的进程,但由于map()函数被阻塞,该进程很可能也被阻塞,不使用任何CPU核心。
| 归档时间: |
|
| 查看次数: |
3152 次 |
| 最近记录: |