Python: выполнение нескольких скриптов одновременно от одного переводчика - PullRequest
1 голос
/ 01 февраля 2010

У меня есть скрипт Python , который снова выполняет 4-5 скриптов Python . Из соображений производительности я хочу использовать один и тот же интерпретатор для выполнения всего сценария.

Как я могу решить эту проблему?

Ответы [ 5 ]

8 голосов
/ 01 февраля 2010

Очевидное решение (которое может потребовать небольшой доработки) - просто вызвать основную функцию каждого сценария из основного сценария.Например, если script1.py содержит:

#!/usr/bin/python
def main():
  // Do something
if __name__ == "__main__":
   main()

положить в master.py

#!/usr/bin/python
import script1
def main():
  script1.main()

if __name__ == "__main__":
  main()

Вы можете продолжить этот шаблон для любого количества скриптов.

3 голосов
/ 01 февраля 2010

Может быть, вы ищете функцию execfile в Python 2.x.

В Python 3 он был удален, но есть простые альтернативы .

1 голос
/ 13 апреля 2018

Я написал пакет для выполнения нескольких сценариев из одного и того же интерпретатора (последовательно, но не одновременно).

Установка

pip install mand

Использование

mand script1.py script2.py script3.py script4.py

Вы можете указать пути к модулям или имена модулей.


Вы можете запускать сценарии одновременно с использованием runpy модуль stdlib (для python3) и threading модуль stdlib. Когда вы вызываете runpy.run_path или runpy.run_module в отдельных потоках, но вы увидите преимущества в производительности, только если модули связаны с IO, а не с CPU.


Использование многопроцессорной обработки или os.system порождает отдельных интерпретаторов для каждого скрипта, поэтому модули не будут работать в одном и том же интерпретаторе.

0 голосов
/ 07 марта 2011

Я не думаю, что это рекомендуется, но в худшем случае система может заставить систему «запускать» каждый скрипт из другого:

import os
os.system('python script1.py')
os.system('python script2.py')
os.system('python script3.py')
os.system('python script4.py')
0 голосов
/ 01 февраля 2010

Текущий переводчик доступен в sys.executable.Вы можете просто передать это явным образом в subprocess.Popen в качестве первого аргумента или передать в качестве аргумента «исполняемый».

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