Python: выполнение нескольких скриптов одновременно от одного переводчика

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

Как я мог справиться с этой проблемой?

5 ответов

Очевидное решение (которое может потребовать небольшой доработки) - просто вызвать основную функцию каждого скрипта из мастер-скрипта. Например, если 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()

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

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

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

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

Установка:

pip install mand

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

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

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


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


При использовании multiprocessing или os.system для каждого скрипта создаются отдельные интерпретаторы, поэтому модули не будут работать в одном и том же интерпретаторе.

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

import os
os.system('python script1.py')
os.system('python script2.py')
os.system('python script3.py')
os.system('python script4.py')

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

Другие вопросы по тегам