У меня есть программа на python, разработанная для разработки 3d-модели, которая анализируется CFD в OpenFOAM.Анализ проводится параллельно с программой под названием «mpirun»;Мой скрипт на Python запускает mpirun через подпроцесс. Открыть.Пока ничего необычного.Что необычно, так это то, что когда mpirun сталкивается с ошибкой одного из своих дочерних элементов и убивает своих дочерних элементов, затем выдает ошибку ... затем родительский процесс python останавливается.И не останавливается в каком-то очевидном месте, например при чтении из канала ... в случайных местах, он просто останавливается ... делает что-либо.
Я попытался запустить свою программу с помощью "python3 -m trace -трассировка ", чтобы увидеть, на какой линии все останавливается, вот окончательный вывод:
foam.py(1765): print("-B")
-B
foam.py(1766): if match:
foam.py(1776): print("-A")
-A
foam.py(1777): if re.match(" *Sum of moments *", line_text):
--- modulename: re, funcname: match
re.py(163): return _compile(pattern, flags).match(string)
--- modulename: re, funcname: _compile
re.py(280): try:
re.py(281): p, loc = _cache[type(pattern), pattern, flags]
re.py(282): if loc is None or loc == _locale.setlocale(_locale.LC_CTYPE):
re.py(283): return p
foam.py(1780): print("A")
A
foam.py(1781): if force_mode:
Как вы можете видеть, он поднимается до" if force_mode: ".... и затем просто останавливается.Очевидно, «если бул» никогда не должен висеть.Я работал над попыткой выяснить это в течение нескольких дней, и я не приблизился к ответу.
Кажется, не имеет значения, как я запускаю процесс через subprocess.Popen - shell= True, shell = False, запуск "mpirun" напрямую, запуск его через скрипт-оболочку bash ... ничего не имеет значения (единственное, что я сохранил - это stdout = subprocess.PIPE, так как я должен иметь возможность читатьвыход).Как только один из детей mpirun умирает, и он сообщает о своей ошибке, только что висит пенопласт.
Есть какие-нибудь подсказки, что здесь может происходить?Я в тупике.(