Избегайте времени установки Python - PullRequest
3 голосов
/ 26 июня 2011

Это изображение ниже говорит, что python занимает много времени в пользовательском пространстве. Можно ли вообще сократить это время?

В том смысле, что я буду запускать скрипт несколько раз по 100 раз. Можно ли запустить python так, чтобы инициализация заняла время, а в следующий раз - нет?

enter image description here

Ответы [ 3 ]

3 голосов
/ 05 июня 2012

Я просто искал то же самое и нашел это:

http://blogs.gnome.org/johan/2007/01/18/introducing-python-launcher/

Python-launcher не решает проблему напрямую, но указывает на интересное направление: если вы создаете небольшого демона, с которым вы можете связаться через оболочку для форка нового экземпляра, вы можете избавиться от своего запуска время.

Например, получите python-launcher и 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

Todo: Адаптируйте его к своей программе, удалите 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

1 голос
/ 27 июня 2011

Напишите логику «сделай это несколько раз 100» в своем скрипте Python. Назовите это ОДИН РАЗ с этого другого языка.

0 голосов
/ 26 июня 2011

Вместо этого используйте timeit:

http://docs.python.org/library/timeit.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...