【问题标题】:Python speed 32 v 64 bit Windows issuePython 速度 32 v 64 位 Windows 问题
【发布时间】:2011-07-20 05:41:55
【问题描述】:

在 32 位 windows 7 和 64 位 windows server 2008 之间移动应用程序时,我遇到了性能问题,两者都具有类似的处理器。我写了一个简单的程序来测试内存分配性能以查看差异。它表明在 64 位窗口上制作列表所需的时间几乎是 32 位窗口的 10 倍。在 32 上使用 python 2.6.5 和在 64 上使用 2.6.6。可能导致问题的原因是什么?我写了一个小“c”程序来做同样的事情,它表明 64 位服务器运行得更快。那么到底出了什么问题呢?

#silly python memory allocation test
from datetime import datetime
import random

d = datetime.now()
listo = [1] * 300000
del listo
print datetime.now()-d
d = datetime.now()
listo = [1] * 3000000
del listo
print datetime.now()-d
d = datetime.now()
listo = [1] * 30000000
print datetime.now()-d

32 日的结果

0:00:00.002000
0:00:00.024000
0:00:00.166000

64 的结果

0:00:00.031000
0:00:00.156000
0:00:02.672000

在 64 位窗口上 Python 和内存性能是否存在一些突出问题?

64 Windows 2008 R2 服务器设置

4 CPU、16GB 内存、20GB C 盘、10GB/s 网络 Xeon X5570 @ 2.93GHz

32 Windows 7 电脑

2 CPU、2GB 内存、500gb C 驱动器、1 Gb/s 网络 Core 2 duo @ 3.00ghz

【问题讨论】:

  • 注意使用更好的时机,例如docs.python.org/library/timeit.html。谢谢
  • 我刚刚在 Windows 7 64 位和 Python 2.6.5 上为您的三个示例使用了 timeit。我必须添加一个 del 以便它不会缩短实际创建。我的时间与您的 32 位时间非常匹配。你的电脑有多快,你有多少内存?

标签: python windows performance 32bit-64bit


【解决方案1】:

我不知道为什么它会更长,但是你应该期待更多的时间,因为在这个例子中,程序在 64 位模式下分配了两倍的内存,就像在 32 位模式下一样,因为 python 使用 32 /64 位指针在其列表中。

当您仍在使用 32 位数据类型时,这在 C 中可能会有所不同。

【讨论】:

  • 是的,可能是他刚刚越过了导致 GC 运行的某个阈值。
  • @Gabe - 或将数据集推出 L3 缓存。
  • @atzz:他正在创建一个包含 30M 整数的列表,在 32 位机器上是 120MB。这是一个地狱般的 L3 缓存! :)
  • @Gabe - 是的,我想我忽略了几个数量级:)
【解决方案2】:

问题是在windows服务器上使用虚拟机软件引起的。

【讨论】:

  • @BenSapp 我真的不知道为什么。但是在没有虚拟服务器软件的情况下运行相同的代码对于 64 位和 32 位 python 性能几乎相同。我在 windows server 2010 64 上使用 VMware 公司的东西。
  • 有趣。我在 VMWare(免费版)上的 Server 2008 R2 VM 上。我问的原因是我已经在 python 2.7 上与 django (OSQA) 碰撞了大约一个星期,试图让它表现得更好。当我点击一个页面时,虚拟机上的 CPU 通常会飙升至 50%,平均响应时间为 400-700 毫秒。当我在 Win7 64(32 位 python)上运行本机时,它对 CPU 和体面的(~130 毫秒)响应时间几乎没有任何影响。差别很大!
【解决方案3】:

我在使用 Python 2.7 和 64 位时遇到了另一个问题。我运行了一个程序,它在 32 位 Python 中导致了小型计算机上的内存溢出。我对是否会使用我的大 RAM 很感兴趣。确实如此。最大 10 GB 和机器挂起。我不得不关闭电源并重新启动计算机。

【讨论】:

  • 我在 windows server 2010 上使用 64 位 python 最多使用了 92 GB。这是服务器刀片可以支持的最大值,所以我不得不更改我的代码以使用更少的内存。 10giga 字节的使用给我带来了任何麻烦。
猜你喜欢
  • 2019-08-19
  • 1970-01-01
  • 2011-12-12
  • 2018-01-25
  • 2012-07-13
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多