避免python安装时间
下图显示python在用户空间中占用了大量时间。是否有可能缩短这段时间 从某种意义上说,我将运行一个脚本数百次。是否可以启动python,以便只需要一次初始化就可以了,而不需要在以后的时间内初始化 改用timeit:避免python安装时间,python,compiler-construction,interpreter,profile,performance,Python,Compiler Construction,Interpreter,Profile,Performance,下图显示python在用户空间中占用了大量时间。是否有可能缩短这段时间 从某种意义上说,我将运行一个脚本数百次。是否可以启动python,以便只需要一次初始化就可以了,而不需要在以后的时间内初始化 改用timeit: 在Python脚本中编写“多次执行此操作”逻辑。从另一种语言中调用它一次。我刚刚搜索了相同的语言,发现: PythonLauncher并没有直接解决这个问题,但它指出了一个有趣的方向:如果您创建一个小的守护进程,您可以通过shell与之联系以派生一个新实例,那么您可能就可以摆脱启
在Python脚本中编写“多次执行此操作”逻辑。从另一种语言中调用它一次。我刚刚搜索了相同的语言,发现: PythonLauncher并没有直接解决这个问题,但它指出了一个有趣的方向:如果您创建一个小的守护进程,您可以通过shell与之联系以派生一个新实例,那么您可能就可以摆脱启动时间 例如,获取python启动器和socatª并执行以下操作:
PYTHONPATH="../lib.linux-x86_64-2.7/" python python-launcher-daemon &
echo pass > 1
for i in {1..100}; do
echo 1 | socat STDIN UNIX-CONNECT:/tmp/python-launcher-daemon.socket &
done
pid = os.fork()
if pid:
return
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
signal.signal(signal.SIGCHLD, signal.SIG_DFL)
glob = dict(__name__="__main__")
print 'launching', program
execfile(program, glob, glob)
raise SystemExit
Todo:根据您的程序进行调整,删除GTK内容。注意&结尾:关闭套接字连接似乎很慢
基本技巧是创建一个打开套接字的服务器。然后它从套接字读取所有数据。一旦有了数据,它就会像下面那样分叉:
PYTHONPATH="../lib.linux-x86_64-2.7/" python python-launcher-daemon &
echo pass > 1
for i in {1..100}; do
echo 1 | socat STDIN UNIX-CONNECT:/tmp/python-launcher-daemon.socket &
done
pid = os.fork()
if pid:
return
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
signal.signal(signal.SIGCHLD, signal.SIG_DFL)
glob = dict(__name__="__main__")
print 'launching', program
execfile(program, glob, glob)
raise SystemExit
以这种方式运行100个程序只花了我0.7秒
如果您想变得非常快,您可能必须从分叉切换到只执行代码,而不是分叉
(这也是我对EmacClient所做的……我的emacs需要大约30秒才能启动(由于我添加了过多的库),但EmacClient-c几乎立即出现。)
➣:不要相信时间的测量粒度如此之小。实际上,这是实际问题的较小版本。实际问题在系统空间中需要0.003秒,但在用户空间中需要大量时间。如@Tim Cooper所示-感谢您的编辑。我想从perl代码中运行python脚本100次。Python scirpt本身运行速度很快。但是在用户空间设置等方面需要花费很多时间,所以,我想减少这个时间。你不能。Python需要很长时间来设置其环境。你只能忍受它。如果这真的是一个问题,那么一个带有perl程序的客户机-服务器类型的程序可以通过套接字将数据传递给python程序。然而,几百次并不是很多次。我怀疑您最好只是运行程序,而不是编写更复杂的解决方案。perl代码在某个时间点具有特定的上下文,并调用python代码来获取该上下文的数据。因此,这将需要大量的努力来重写代码。因此,寻找一些简单的东西。
timeit
在这种情况下没有帮助。他不是在对程序进行基准测试,他想知道他是否能对Python缓慢的启动时间做些什么。或者,你可以检查你是否可以在没有站点文件的情况下使用Python:Python-s[script]
。没有-S
python-c'
对我来说需要0.018秒。有了-S
我就到了时代python-S-c'
→ 0.004s。请注意,这样您可能会错过一些已安装的软件包。我现在也将此答案发布到我的网站上: