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 в качестве первого аргумента или передать в качестве аргумента "исполняемый файл".