Запуск Twistd с Pypy

Я пробую Pypy, потому что он показывает впечатляющие тесты по сравнению с CPython. Кроме того, я в основном использую библиотеку Twisted в своем коде. Теперь я могу запустить тестовый скрипт, использующий реактор Twisted, так что я думаю, что мои настройки в порядке. Однако я не знаю, как запустить демонизатор Twisted (twistd) с помощью Pypy.


person kerrigangster    schedule 25.08.2011    source источник


Ответы (1)


Вы можете сделать это явно во время выполнения:

~$ /usr/bin/pypy /usr/bin/twistd ...

Это работает, потому что он специально запускает PyPy и говорит ему начать интерпретацию скрипта twistd.

Или вы можете сделать это постоянно во время установки:

~/Twisted-11.0.0$ /usr/bin/pypy setup.py install

Это работает, потому что distutils (то, что использует setup.py) переписывает строку #! каждого устанавливаемого скрипта, чтобы указать на интерпретатор, используемый для установки. Таким образом, #!/usr/bin/env python в исходном коде установки становится #!/usr/bin/pypy в установленной копии.

person Jean-Paul Calderone    schedule 25.08.2011
comment
~$ /usr/bin/pypy /usr/bin/twistd ... Это работало только тогда, когда я устанавливал setuptools с помощью pypy. Если нет, модуль pkg_resources в Twistd не может быть найден. - person kerrigangster; 08.09.2011
comment
~/Twisted-11.0.0$ /usr/bin/pypy setup.py install При тестировании Debian это закончилось ошибкой "Слишком много открытых файлов" при извлечении/установке .egg. Мне пришлось использовать более высокий лимит открытых файлов с помощью ulimit. - person kerrigangster; 08.09.2011
comment
Проблема слишком большого количества открытых файлов описана здесь bugs.pypy.org/issue878 и связана с тем, setuptools работает с файлами. Поскольку pypy не выполняет подсчет ссылок GC, он может не выполнять GC/закрывать файлы намного позже. Это довольно плохо, так как это может случиться при установке скрученной отдельно или в качестве зависимости в pip — особенно когда это зависимость от чего-то еще, это все ломает. - person fiorix; 13.06.2012