15

I use Python 2.5.4. My computer: CPU AMD Phenom X3 720BE, Mainboard 780G, 4GB RAM, Windows 7 32 bit.

I use Python threading but can not make every python.exe process consume 100% CPU. Why are they using only about 33-34% on average?.

I wish to direct all available computer resources toward these large calculations so as to complete them as quickly as possible.

EDIT: Thanks everybody. Now I'm using Parallel Python and everything works well. My CPU now always at 100%. Thanks all!

4

8 回答 8

39

看来您有一个 3 核 CPU。如果您想在本机 Python 代码中使用多个 CPU 内核,则必须生成多个进程。(两个或多个 Python 线程不能在不同的 CPU 上同时运行)

正如R. Pate所说,Python 的multiprocessing模块是一种方式。但是,我建议改用Parallel Python 。它负责分配任务和消息传递。您甚至可以在许多单独的计算机上运行任务,而无需对代码进行少量更改。

使用它非常简单:

import pp

def parallel_function(arg):
    return arg

job_server = pp.Server() 

# Define your jobs
job1 = job_server.submit(parallel_function, ("foo",))
job2 = job_server.submit(parallel_function, ("bar",))

# Compute and retrieve answers for the jobs.
print job1()
print job2()
于 2009-11-16T16:42:55.877 回答
25

尝试多处理模块,因为 Python,虽然它有真正的本地线程,但在 GIL 被持有时会限制它们的并发使用。另一种选择,如果你需要真正的速度,你应该看看,是编写一个 C 扩展模块并从 Python 调用其中的函数。您可以在这些 C 函数中释放 GIL。

另请参阅David BeazleyMindblowing GIL

于 2009-11-16T16:36:11.100 回答
12

全局解释器锁

采用这种锁的原因包括:

* increased speed of single-threaded programs (no necessity to acquire or release locks
  on all data structures separately)
* easy integration of C libraries that usually are not thread-safe.

使用 GIL 语言编写的应用程序必须使用单独的进程(即解释器)来实现完全并发,因为每个解释器都有自己的 GIL。

于 2009-11-16T16:44:30.007 回答
1

从 CPU 使用情况来看,您似乎仍在单核上运行。尝试用相同的线程代码运行 3 个或更多线程的简单计算,看看它是否利用了所有内核。如果没有,您的线程代码可能有问题。

于 2009-11-16T16:40:27.923 回答
1

无堆栈 Python怎么样?

于 2009-11-16T16:51:10.727 回答
0

您的瓶颈可能在其他地方,例如硬盘驱动器(分页)或内存访问。

于 2009-11-16T16:35:12.740 回答
0

您应该执行一些操作系统和 Python 监控以确定瓶颈在哪里。

以下是 Windows 7 的一些信息:

性能监视器:您可以使用 Windows 性能监视器实时检查运行的程序如何影响计算机的性能,也可以通过收集日志数据以供日后分析。(控制面板->所有控制面板项->性能信息和工具->高级工具->查看性能监视器)

资源监视器:Windows 资源监视器是一种系统工具,可让您实时查看有关硬件(CPU、内存、磁盘和网络)和软件(文件句柄和模块)资源使用情况的信息。您可以使用资源监视器来启动、停止、暂停和恢复进程和服务。(控制面板->所有控制面板项->性能信息和工具->高级工具->查看资源监视器

于 2009-11-16T16:43:44.703 回答
0

我通过手动运行第二个脚本解决了导致我写这篇文章的问题。这篇文章帮助我同时运行多个 python 脚本

我设法在新打开的终端窗口中执行,在那里输入命令。不如 shift + enter 方便,但可以完成工作。

于 2022-01-11T11:35:47.560 回答