提高Python模块导入速度

以前(Speeding up the python “import” loaderPython — Speed Up Imports?)已经询问了如何加快导入Python模块的问题,但没有具体的例子,并没有得到可接受的解决方案。因此,我将在此再次讨论这个问题,但这一次就是具体的例子。

我有一个Python脚本,从磁盘加载3-D映像堆栈,使其平滑,并将其显示为电影。当我想快速查看我的数据时,我从系统命令提示符中调用此脚本。我可以用700 ms来平滑数据,因为它与MATLAB相当。但是,导入模块需要额外的650 ms。所以从用户的角度来看,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]

我已经尝试使用,但这并不是更快。由于Matplotlib是主要的罪魁祸首,它的屏幕更新缓慢,我寻找替代品。一个是PyQtGraph,但是需要550 ms才能导入。

我知道一个明显的解决方案,即从交互式Python会话而不是系统命令提示符调用我的函数。这很好,但它也是像MATLAB一样,我更喜欢从系统提示中使我的功能可用的优雅。

我是Python的新手,我不知道在这一点上如何进行。由于我是新的,我会感谢有关如何实施提出的解决方案的链接。理想情况下,我正在寻找一个简单的解决方案(不是我们所有!),因为代码需要在多台Mac和Linux机器之间移植。

您可以构建一个简单的服务器/客户端,服务器不间断地运行并更新情况,客户端只需传达下一个文件进行处理。

我写了一个简单的服务器/客户端示例,基于socket模块docs:http://docs.python.org/2/library/socket.html#example的基本示例

这里是server.py:

# expensive imports
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import scipy.ndimage
import scipy.signal
import sys
import os

# Echo server program
import socket

HOST = ''                 # Symbolic name meaning all available interfaces
PORT = 50007              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
while 1:
    conn, addr = s.accept()
    print 'Connected by', addr
    data = conn.recv(1024)
    if not data: break
    conn.sendall("PLOTTING:" + data)
    # update plot
    conn.close()

和client.py:

# Echo client program
import socket
import sys

HOST = ''    # The remote host
PORT = 50007              # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall(sys.argv[1])
data = s.recv(1024)
s.close()
print 'Received', repr(data)

你只需运行服务器:

python server.py

这是进口的,那么客户端只是通过套接字发送新文件的文件名来绘制:

python client.py mytextfile.txt

那么服务器会更新图。

在我的机器上运行你的导入需要0.6秒,而运行client.py 0.03秒。

http://stackoverflow.com/questions/16373510/improving-speed-of-python-module-import

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:提高Python模块导入速度