小编dpi*_*h40的帖子

简单的Python代码需要很长时间才能运行,Hotshot错误报告

我正在尝试使用hotshot优化一些代码,我希望它很好,因为它是高性能的分析器和所有.但由于某种原因,我得到了非常不准确的结果.在我最近的分析运行中,hotshot报告了我称之为7.946秒的顶级函数的累积时间.但是,如果没有计时,我可以告诉它需要更长的时间.使用time.time()自己定时运行时间给我一个42.465秒的运行时间.我猜这是因为hotshot不计算系统IO时间或其他什么,我的程序是批量处理大量的二进制文件?

但是,使用更多time.time()块我将大部分额外时间使用(hotshot未注意到)缩小到不执行任何IO的较低级别处理功能.hotshot报告该功能的总时间和累计时间分别为4.414和6.185秒.但是,再次使用time.time()语句我发现它的累积时间超过30秒.在一个相对简单的代码块中花费的累积时间是7.32秒,比在整个函数中花费的热点更长.该块看起来像这样:

format = element[1]
if isinstance(format, tuple):
    format, operator, operand = format
else:
    operator, operand = (None, None)
Run Code Online (Sandbox Code Playgroud)

而已.这个区块运行了900多万次,所以也许我不应该感到惊讶的是花了这么多时间.但显然没有IO在这里完成.为什么热点如此低估了这个功能(以及整个程序)的时间?

在你问之前,不,我没有使用多线程或类似的东西.

python optimization profiling

5
推荐指数
1
解决办法
1023
查看次数

从文件中读取和存储任意字节长度的整数

我试图通过在 numpy 中进行解析/数据积累来加速我去年编写的二进制文件解析器。numpy 能够定义自定义数据结构并将数据从二进制文件中提取到它们中,这看起来像我需要的,除了这些文件中的某些字段是“非标准”长度(例如 6 字节)的无符号整数。由于我使用的是 Python 2.7,因此我制作了自己的 int.from_bytes 模拟版本来处理这些字段,但是如果有任何方法可以在 numpy 中将这些字段本地读取为整数,那显然会更快且更可取。

python numpy

5
推荐指数
1
解决办法
1088
查看次数

当作为可执行文件冻结时,多处理运行主窗口的新实例

一年前我已经问过这个问题.我的应用程序使用Python的多处理模块,从命令行运行时工作正常,但是当我使用Pyinstaller将其打包为可执行文件时,多个进程会生成为原始的新实例,而不是运行它们应该运行的函数.上次给我的建议以及我看到的其他地方的建议是multiprocessing.freeze_support(在我的if __name__ == "__main__":块开始时打电话,我一直这样做,但是由于某种原因我突然再次遇到这个问题.还有什么可能导致这个?

更新:我已确认freeze_support()行的存在根本不会影响此问题.对它进行注释或取消注释它会产生完全相同的行为:主窗口的副本被打开并坐在那里什么都不做.这是在我的主要Python模块的最末端调用它的块:

if __name__ == '__main__':
    freeze_support()

    # (A bunch of commented-out lines)
    main()
Run Code Online (Sandbox Code Playgroud)

python pyinstaller multiprocessing

5
推荐指数
1
解决办法
1792
查看次数

Python字符串比较 - 特殊/ Unicode字符的问题

我正在编写一个Python脚本来处理一些音乐数据.它应该通过比较它们的条目并匹配它们来合并两个独立的数据库.它几乎正常工作,但在比较包含特殊字符(即重音字母)的字符串时失败.我很确定它是ASCII与Uni​​code编码问题,因为我收到错误:

"Unicode相等比较无法将两个参数都转换为Unicode - 将它们解释为不相等"

我意识到我可以使用正则表达式来删除有问题的字符,但我正在处理大量数据并且依赖正则表达式使我的程序变得非常慢.有没有办法让Python正确比较这些字符串?这里发生了什么 - 有没有办法判断它是否将我的字符串存储为ASCII或Unicode?

编辑1:我使用的是Python v2.6.6.检查类型后,我发现一个数据库向我发出Unicode字符串,一个给出ASCII.所以这可能就是问题所在.我正在尝试将ASCII字符串从第二个数据库转换为Unicode,使用类似的行

line = unicode(f.readline().decode(latin_1).encode(utf_8))
Run Code Online (Sandbox Code Playgroud)

但这会产生如下错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 41: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

我不确定'ascii'编解码器为什么抱怨,因为我正在尝试 ASCII 解码.有人可以帮忙吗?

python string

4
推荐指数
1
解决办法
1万
查看次数

在PyGTK中动态修改/刷新菜单内容

我正在尝试在我用PyGTK编写的GUI菜单中实现最近打开的项目列表.我这样初始化菜单:

self.filemenu = gtk.Menu()

self.init_file_menu()

self.fileitem = gtk.MenuItem("File")
self.fileitem.set_submenu(self.filemenu)
menubar = gtk.MenuBar()
menubar.append(self.fileitem)
outerframe.pack_start(menubar, False, False)

def init_file_menu(self):
    for widget in self.filemenu.get_children():
        self.filemenu.remove(widget)

    openitem = gtk.MenuItem("Open")
    self.filemenu.append(openitem)
    openitem.connect("activate", self.open_file)

    self.filemenu.append(gtk.SeparatorMenuItem())

    for recentitem in self.settings['recentfiles']:
        item = gtk.MenuItem(os.path.basename(recentitem))
        self.filemenu.append(item)
        item.connect("activate", self.open_file, recentitem)
    self.filemenu.show()
Run Code Online (Sandbox Code Playgroud)

self.settings ['recentitems']是一个在打开文件时被修改的双端队列; 然后再次调用init_file_menu.我的目标是清空菜单,然后按正确的顺序用正确的项目重新填充它.在启动时填充菜单时,此代码工作正常.但由于某些原因,当对Menu.remove的调用工作正常并清空菜单时,追加调用不会重新添加项目并且它仍然为空.如果我调用它的get_children方法,我看到它们都在内部,但接口尚未更新以反映这一点.如何刷新显示的菜单并使最近的项目列表按预期工作?

我也接受如何使用RecentChooserMenu小部件的方向,如果这是我正在寻找的.

python gtk pygtk

3
推荐指数
1
解决办法
1488
查看次数

分配一块内存并立即在C中释放它会失败

在我与Python集成的C模块的部分代码中,我有一个char**(字符串数组),它被重复分配,填充已分配的字符串,然后再次释放和分配.一般模式是当某个函数被调用(来自Python)提供数组的新内容(作为列表)时,它遍历字符串数组,释放它们中的每一个,然后释放数组本身.然后它再次分配数组以保存新Python列表的内容,然后为每个要保留的字符串分配内存.

所有这些都说我在尝试释放列表中的一个字符串时遇到错误.这个错误是确定性的; 它始终是程序中同一个单词列表中的同一个单词,但是这个单词或单词列表没有什么特别之处.(它只是["CCellEnv","18","34"],这是与许多其他类似的格式)我尝试将一些调试代码添加到分配字符串的循环中; 这是产生错误的函数:

static PyObject* py_set_static_line(PyObject* self, PyObject* args)
{
    int i;
    //Free the old values of the allocated variables, if there are any
    if (numStaticWords > 0)
    {
        for (i = 0; i < numStaticWords; i++)
        {
            printf("Freeing word %d = '%s'\n", i, staticWords[i]);
            free(staticWords[i]);
        }
        free(staticWords);
        free(staticWordMatches);
    }

    //Parse arguments
    PyObject* wordList;
    unsigned short numWords;
    PyObject* wordMatchesList;
    if (!PyArg_ParseTuple(args, "O!HO!", &PyList_Type, &wordList, &numWords, &PyList_Type, &wordMatchesList))
        return NULL;

    numStaticWords = numWords;
    if (numStaticWords > 0)
    {
        staticWords = …
Run Code Online (Sandbox Code Playgroud)

c python

2
推荐指数
1
解决办法
172
查看次数

在Windows 7上安装了pygraphviz,但无法导入它; 找不到_graphviz

我试图在我的64位Windows 7 SP1安装上安装pygraphviz.python setup.py install通过更正setup.py文件的以下行,我能够获得通常的命令:

include_dirs = r"C:\Program Files (x86)\Graphviz2.38\include"
library_dirs = r"C:\Program Files (x86)\Graphviz2.38\lib\release\lib"
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试导入它时,我收到以下错误:

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygraphviz
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pygraphviz\__init__.py", line 58, in <module>
    from .agraph import AGraph, Node, Edge, Attribute, ItemAttribute
  File "pygraphviz\agraph.py", line 26, in <module>
    from . import …
Run Code Online (Sandbox Code Playgroud)

python graphviz pygraphviz

1
推荐指数
1
解决办法
3074
查看次数

使GTK TreeView中的行无法选择

我想让PyGTK Tree-view(耦合到List Store)的选择行不可选,如果可能的话,显示为灰色.

有没有办法做到这一点?

python gtk pygtk

0
推荐指数
1
解决办法
1832
查看次数