下图显示了python在用户空间中花费了大量时间。有没有可能减少这个时间?
从这个意义上说,我将运行一个脚本几百次。是否可以启动python,以便只初始化一次而不在随后的时间进行初始化??

最佳答案

我只是找了一下,发现了这个:
http://blogs.gnome.org/johan/2007/01/18/introducing-python-launcher/
Python启动程序并不能直接解决这个问题,但它指向了一个有趣的方向:如果您创建了一个小守护进程,您可以通过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

托多:根据你的程序调整它,去掉GTK的东西注意结尾处的&:关闭套接字连接似乎很慢。
关键的技巧是创建一个打开套接字的服务器。然后它从套接字读取所有数据一旦有了数据,它就会像下面这样分叉:
        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秒。
如果你想变得非常快,你可能需要从分叉转换到只执行代码而不是分叉。
(这也是我对emacsclient所做的……我的emacs需要大约30秒才能启动(因为我添加的额外库使用过多),但是emacsclient-c几乎立即出现。)
呃:http://www.socat.org

关于python - 避免python设置时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6485848/

10-11 02:43
查看更多