2017-04-21 989 views
0

我正在写一个Python程序,它将从文本文件加载一个单词表,然后尝试使用每个单词解压缩存档。如果没有使用所有的cpu核心,那就不是很严重。 GIL的Bcuz,如果我没有弄错,用Python进行线程化并不是一个好的选择。所以我想获得cpu_cores的数量,拆分wordlist并使用multiprocessing.process模块​​在不同的进程中处理wordlist的不同部分。但是每个进程都会自动固定到cpu内核上吗?如果没有,是否有办法手动固定它们?如何将不同的进程固定到Python中的单个cpu核心

回答

2

您可以通过导入 import multiprocessing as mp使用蟒蛇multiprocessing并通过mp.cpu_count()找出处理器的数量,并应在大多数平台上工作。

要在特定CPU内核上启动程序/进程(在Linux中),您可以使用taskset并将此guide作为参考。

另一种跨平台解决方案是使用python的psutil包。

但是我建议你使用线程/进程池方法,因为在我看来你应该让操作系统把任务分配给每个cpu/core。你可以看看How to utilize all cores with python multiprocessing如何解决这个问题。

+0

感谢您的回答..是否在Windows上工作的任务?如果不是,有没有Windows替代? – scripter

+1

@scripter我用psutil软件包更新了我的答案,它是一个可在Windows上工作的跨平台解决方案。要在Windows上使用taskset,您可能必须使用Cygwin或类似的东西。 – uzr

+1

@scripter,创建进程时,Windows cmd.exe shell的'start'命令可以设置CPU关联和首选NUMA节点。也许有一种方法可以使用WMI(即wmic.exe)修改正在运行的进程的关联性。您可以在PowerShell中使用'(Get-Process -Id $ target_pid).ProcessorAffinity = $ affinity_mask'来实现。 – eryksun

相关问题