我使用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使用率 - 不仅仅是进程数量 - 或者失败,是否有任何解决方法?
我想向函数添加类型提示,该函数将接受带有__getitem__方法的任何对象。例如,在
def my_function(hasitems, locator):
hasitems[locator]
Run Code Online (Sandbox Code Playgroud)
我不想限制hasitems为特定类型,例如list或dict。只要支持__getitem__,它就是的适当参数my_function。如何在没有不必要限制的情况下注释其类型?
编辑:显然,PyCharm可以在许多常见情况下得出适当的提示,但在我的实际用例中却不能。我无法发布代码,因为它是用于工作的,而且我找不到PyCharm失败的非专有最小示例。无论如何,原始问题不会引用PyCharm,它仍然是类型提示的有效用例。
我在 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每次我重新运行时,数字都会改变。 …
使用以下import语句轻松导入具有本地名称的模块:
import numpy as np
Run Code Online (Sandbox Code Playgroud)
我相信np这里被称为"本地名称",但我可能会感到困惑.
我无法弄清楚如何使用该importlib模块做同样的事情.importlib.import_module()据我所知,我不会选择本地名称.有什么建议?