关于如何加速Python模块导入的问题以前已经被提出(Speeding up the python "import" loader和Python -- Speed Up Imports?),但没有具体的例子,也没有产生公认的解决方案。因此,我将在这里再次讨论这个问题,但这一次是一个具体的例子。
我有一个Python脚本,它从磁盘加载一个3-D图像堆栈,对其进行平滑处理,并将其显示为电影。当我想要快速查看数据时,我从系统命令提示符调用此脚本。我可以用700ms来平滑数据,因为这可以与MATLAB相媲美。但是,导入模块需要额外的650毫秒。因此,从用户的角度来看,Python代码的运行速度减半。
这是我要导入的一系列模块:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import scipy.ndimage
import scipy.signal
import sys
import os
当然,并不是所有模块的导入速度都一样慢。罪魁祸首是:
matplotlib.pyplot [300ms]
numpy [110ms]
scipy.signal [200ms]
我已经尝试过使用from
,但是速度并不快。由于Matplotlib是罪魁祸首,而且它以屏幕更新缓慢而闻名,所以我寻找了替代方案。一个是PyQtGraph,但它需要550ms才能导入。
我知道一个显而易见的解决方案,那就是从交互式Python会话调用我的函数,而不是从系统命令提示符调用。这很好,但它太像MATLAB了,我更喜欢在系统提示符下使用函数的优雅。
我是Python的新手,目前我不确定该如何继续。由于我是新人,我希望获得有关如何实现所提出的解决方案的链接。理想情况下,我正在寻找一个简单的解决方案(我们不都是这样吗?)因为代码需要在多台Mac和Linux机器之间移植。
发布于 2014-08-28 18:51:08
1.35秒并不长,但我想,如果你习惯于用一半的时间来“快速检查”,那么可能看起来是这样的。
Andrea建议一个简单的客户端/服务器设置,但在我看来,您可以很容易地对脚本进行非常轻微的修改,并在您工作时保持其控制台窗口打开:
>H19>再次从脚本接收结果而无需导入,同时它愉快地等待输入
我假设你的脚本每次都是一样的,即你不需要每次都给它图像堆栈位置或任何特定的命令(但这些也很容易做!)。
RAAC_Script.py示例:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import scipy.ndimage
import scipy.signal
import sys
import os
print('********* RAAC\'s Script Now Running *********')
while True: # Loops forever
# Display a message and wait for user to enter text followed by enter key.
# In this case, we're not expecting any text at all and if there is any it's ignored
input('Press Enter to test image stack...')
'''
*
*
**RAAC's Code Goes Here** (Make sure it's indented/inside the while loop!)
*
*
'''
要结束脚本,请关闭控制台窗口或按ctrl+c键。
我已经把它做得尽可能简单,但它只需要很少的额外工作就可以处理一些事情,比如很好地退出,根据输入做一些稍微不同的事情,等等。
https://stackoverflow.com/questions/16373510
复制相似问题