我有一个Python脚本,该脚本从磁盘加载3-D图像堆栈,对其进行平滑处理,然后将其显示为电影。当我想快速查看数据时,我从系统命令提示符下调用此脚本。我认为平滑数据需要700毫秒,因为这与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,但是导入需要550毫秒。
我知道一个显而易见的解决方案,它是从交互式Python会话而不是系统命令提示符中调用函数。很好,但也很像MATLAB,我更喜欢从系统提示中使用我的函数的优雅方式。
我是Python的新手,现在不确定如何继续。由于我是新手,所以我很高兴看到有关如何实现建议的解决方案的链接。理想情况下,我正在寻找一个简单的解决方案(不是我们所有人!),因为代码需要在多台Mac和Linux机器之间可移植。
您可以构建一个简单的服务器/客户端,该服务器连续运行以制作和更新绘图,而客户端仅传达下一个要处理的文件。
我根据socket
模块文档中的基本示例编写了一个简单的服务器/客户端示例: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秒。
根据这个答案,您可以使用来使用类似这样的相对导入: 为什么相对导入不适用于sklearn。特征提取。文本 我验证了是一个具有以下功能的模块: 编辑 “不工作”,我的意思是它不导入模块。 我正在使用Python 3.4 绝对方式工作: 相对方式不:
主要内容:import 模块名 as 别名,from 模块名 import 成员名 as 别名使Python 进行编程时,有些功能没必须自己实现,可以借助 Python 现有的标准库或者其他人提供的第三方库。比如说,在前面章节中,我们使用了一些数学函数,例如余弦函数 cos()、绝对值函数 fabs() 等,它们位于 Python 标准库中的 math(或 cmath)模块中,只需要将此模块导入到当前程序,就可以直接拿来用。 前面章节中,已经看到使用 import 导入模块的语法,但实际上
我需要在Python中导入一个名为array_queue的模块。我检查了一下,如果我不使用它,就会出现一个提示:“array_queue imported but unused”。但是,如果我使用它并运行该程序,则会出现以下情况: ModuleNotFounderRror:没有名为“array_queue”的模块
3.3 Python模块导入 与C++类似的,在Python中导入其他模块时,也需要相关处理。 需求:首先新建一个Python文件A,再创建Python文件UseA,在UseA中导入A并调用A的实现。 实现: 新建两个Python文件,使用 import 实现导入关系; 添加可执行权限、编辑配置文件并执行UseA。 1.新建两个Python文件并使用import导入 文件A实现(包含一个变量):
问题内容: 这是我的包裹层次结构 现在我要导入里面。所以我给了 app1.py。 但是我收到以下错误: 我还应该提到我是从server.py导入app1.py的。是我实际上正在运行的文件。当server.py导入app1.py时,尝试导入时出现上述错误 我在这里做错了什么? 问题答案: 如果您以脚本运行,则不会将的父目录添加到中。该目录本身,而不是被添加(而不是作为一个包,但作为进口搜索路径)。
问题内容: 我已尝试找到有关最佳使用还是全面的指南。我刚开始使用Python,并且正在尝试着眼于最佳实践。 基本上,我希望有人能分享他们的经验,其他开发人员有什么喜好,以及避免遇到麻烦的最佳方法是什么? 问题答案: 和之间的区别主要是主观的。选择最喜欢的一个,并在使用中保持一致。这里有一些要点可以帮助你做出决定。 优点: - 减少维护你的import报表。无需添加任何其他导入即可开始使用模块中的另