中国服务器网

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

Python在64位窗口上的32位内存限制

我收到一个记忆问题,我似乎无法理解。 我在一个Windows 8 64位的机器,8GB的内存和运行一个32位的Python程序。 程序读取5,118个压缩的numpy文件(npz)。 Windows报告这些文件在磁盘上占用1.98 GB 每个npz文件包含两段数据:“arr_0”的types为np.float32,“arr_1”的types为np.uint8 python脚本读取每个文件将其数据附加到两个列表中,然后closures该文件。 围绕文件4284/5118,程序抛出一个MemoryException 不过,任务pipe理器说错误发生时python.exe * 32的内存使用量是1,854,848K〜1.8GB。 远低于我的8 GB限制,或32位程序的4GB限制。 在程序中,我捕捉到内存错误,并报告:每个列表的长度为4285.第一个列表包含共计1,928,588,480个float32的〜= 229.9 MB的数据。 第二个列表包含12342962672 uint8的〜= 1471.3MB的数据。 所以,一切似乎都在检查。 除了我得到内存错误的部分。 我绝对有更多的内存,它崩溃的文件是〜800KB,所以它不会阅读一个巨大的文件失败。 此外,该文件没有损坏。 如果我事先没有用完所有的内存,我可以读得很好。 为了让事情更加令人困惑,所有这些似乎在我的Linux机器上运行良好(尽pipe它的内存是16GB,而我的Windows机器是8GB),但是,似乎并不是机器的内存造成这个问题。 为什么Python抛出一个内存错误,当我期望它应该能够分配另外2GB的数据?

真的有办法唯一地识别任何电脑

我知道在stackoverflow中有一些类似的问题如下: 什么是唯一识别计算机的好方法? 什么是一个很好的独特的PC标识符? 独特的计算机ID C# WIN32_Processor :: ProcessorId对于所有计算机都是唯一的 如何唯一标识使用C#的计算机? …还有几十个,我都研究过了。 问题是,一些被接受的答案已经build议将MAC地址作为唯一的标识符,这是完全不正确的。 其他一些答案build议使用看起来更合乎逻辑的各种组件的组合。 但是,在使用组合的情况下,应该考虑哪个组件自然不太可能经常改变。 几天前,我们开发了一个软件许可问题的密钥生成器,我们使用CPUID和MAC的组合来唯一地识别Windows PC,直到实际testing,我们认为我们的方法是足够好的。 讽刺的是,当我们去testing它时,我们发现有三台电脑用我们的密钥生成器返回相同的ID! 那么,究竟有什么办法来唯一标识任何电脑? 现在我们只需要让我们的密钥生成器在Windows PC上工作。 一些使用c#的方法(如果可能的话)会很好,因为我们的系统是在.net上开发的。 更新: 对不起,造成一些混乱和明显的虚惊。 我们在检索硬件信息的方法中发现了一些不正确的地方。 我主要想到删除这个问题,因为现在我自己的困惑已经消失了,而且我相信两个或更多个组件的组合足以识别一台计算机。 然而,我决定保留它,因为我认为我应该澄清是什么导致问题,因为同样的事情可能会伤害其他人在未来。 这是我们正在做的(不包括其他代码): 我们使用getManagementInfo函数来检索MAC和处理器ID private String getManagementInfo(String StrKey_String, String strIndex) { String strHwInfo = null; try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + StrKey_String); foreach (ManagementObject share in searcher.Get()) […]