小编Dav*_*ski的帖子

限制python多处理中的总CPU使用率

我使用multiprocessing.Pool.imap在Windows 7上使用Python 2.7并行运行许多独立作业.使用默认设置,我的总CPU使用率固定为100%,由Windows任务管理器测量.这使得我的代码在后台运行时无法执行任何其他工作.

我已经尝试将进程数限制为CPU数减1,如如何限制Python使用的处理器数量中所述:

pool = Pool(processes=max(multiprocessing.cpu_count()-1, 1)
for p in pool.imap(func, iterable):
     ...
Run Code Online (Sandbox Code Playgroud)

这确实减少了正在运行的进程总数.但是,每个过程只需要更多的周期来弥补它.所以我的总CPU使用率仍然固定为100%.

有没有办法直接限制总CPU使用率 - 不仅仅是进程数量 - 或者失败,是否有任何解决方法?

cpu-usage multiprocessing python-2.7

11
推荐指数
2
解决办法
2万
查看次数

支持__getitem__的类的Python类型提示

我想向函数添加类型提示,该函数将接受带有__getitem__方法的任何对象。例如,在

def my_function(hasitems, locator):
    hasitems[locator]
Run Code Online (Sandbox Code Playgroud)

我不想限制hasitems为特定类型,例如listdict。只要支持__getitem__,它就是的适当参数my_function。如何在没有不必要限制的情况下注释其类型?

编辑:显然,PyCharm可以在许多常见情况下得出适当的提示,但在我的实际用例中却不能。我无法发布代码,因为它是用于工作的,而且我找不到PyCharm失败的非专有最小示例。无论如何,原始问题不会引用PyCharm,它仍然是类型提示的有效用例。

python typing

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

tkinter:应用程序终止后事件绑定仍然存在?

我在 Python 3.4 中运行 tkinter。即使在应用程序终止后,按钮事件似乎仍然绑定到命令。代码片段:

# application class
class DataSel:
    def __init__(self,parent):
        self.parent = parent
        <...>
        self.button_sel = tk.Button(self.parent,text='Select')
        self.button_sel.grid(row=1,sticky='nesw')
        self.button_sel.bind('<Button-1>',self.sel_click)

        self.button_quit = tk.Button(self.parent,text='Quit')
        self.button_quit.grid(row=2,sticky='nesw')
        self.button_quit.bind('<Button-1>',self.quit_click)

    def sel_click(self,event):
        self.filename = askopenfilename(parent=self.parent)
        <...>

    def quit_click(self,event):
        self.parent.destroy()

# main part of application
root = tk.Tk()
root.lift()
sel = DataSel(root)
root.lift()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

当我从头开始重新启动解释器并运行此应用程序时,没有错误消息。但是,该方法完成button_sel后,按钮仍处于按下状态(浅浮雕)sel_click。然后,如果我退出应用程序并重新运行它,我会在 shell 中收到以下消息:

invalid command name ".94227256"
    while executing
"$w cget -state"
    (procedure "tk::ButtonDown" line 12)
    invoked from within
"tk::ButtonDown .94227256"
    (command bound to event)
Run Code Online (Sandbox Code Playgroud)

.94227256每次我重新运行时,数字都会改变。 …

python tkinter

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

使用importlib导入具有本地名称的模块

使用以下import语句轻松导入具有本地名称的模块:

import numpy as np
Run Code Online (Sandbox Code Playgroud)

我相信np这里被称为"本地名称",但我可能会感到困惑.

我无法弄清楚如何使用该importlib模块做同样的事情.importlib.import_module()据我所知,我不会选择本地名称.有什么建议?

python

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