RandomTrips.py зависает в Windows на неопределенный срок; выходные данные записываются только после принудительного прекPython

Программы на Python
Ответить
Anonymous
 RandomTrips.py зависает в Windows на неопределенный срок; выходные данные записываются только после принудительного прек

Сообщение Anonymous »

Я создаю агент ИИ на основе SUMO с использованием Python (TraCI + randomTrips.py) в Windows.
Я столкнулся с проблемой, при которой

Код: Выделить всё

randomTrips.py
зависает на неопределенный срок[/b] во время генерации трафика при программном выполнении через Python. Процесс никогда не завершается сам по себе и завершается только по истечении времени ожидания.
Наблюдаемое поведение
  • Код: Выделить всё

    netconvert
    завершается нормально и генерирует .net.xml
  • Код: Выделить всё

    randomTrips.py
    запускается, но никогда не завершает работу
  • Код: Выделить всё

    .trips.xml
    и .rou.xml генерируются только после принудительного завершения процесса
  • Во время нормального выполнения создается только .net.xml
  • Ошибки не появляются на стандартном выводе или stderr
Ожидается поведение

Код: Выделить всё

randomTrips.py
должен корректно завершать работу после создания поездок/маршрутов.
То, что я пробовал
  • Удалено --validate
  • Перенаправлено stdout/stderr в файлы
  • Добавлено явно subprocess.run(timeout=…)
  • Проверено, что SUMO_HOME и PATH включают двоичные файлы SUMO
  • Подтверждено, что duarouter доступен
Зависание сохраняется постоянно.
Код

Код: Выделить всё

randomTrips.py
(предоставлено SUMO):[/b]

Необработанный код: https://raw.githubusercontent.com/eclip ... omTrips.py
Прямой код: https://github.com/eclipse-sumo/sumo/bl ... omTrips.py
Мой код Python (точка зависания с комментариями):

Код: Выделить всё

@mcp.tool()
def import_osm_map(osm_file_path: str, output_name: str = "osm_map"):
sumo_home = r"C:\Program Files (x86)\Eclipse\Sumo"
if not os.path.exists(sumo_home):
return f"Error: SUMO_HOME not found at {sumo_home}"

sumo_bin = os.path.join(sumo_home, "bin")

env = os.environ.copy()
env["SUMO_HOME"] = sumo_home
env["PATH"] += os.pathsep + sumo_bin

net_file = f"{output_name}.net.xml"
trip_file = f"{output_name}.trips.xml"
route_file = f"{output_name}.rou.xml"
config_file = f"{output_name}.sumocfg"
log_path = "map_generation.log"

try:
with open(log_path, "w") as log_file:
if not os.path.exists(net_file):
log_file.write(f"Converting {osm_file_path}...\n")
log_file.flush()
netconvert_cmd = [
os.path.join(sumo_bin, "netconvert"),
"--osm-files", osm_file_path,
"-o", net_file,
"--geometry.remove", "--ramps.guess", "--tls.guess"
]
subprocess.run(
netconvert_cmd,
env=env,
stdout=log_file,
stderr=log_file,
check=True,
timeout=60
)
else:
log_file.write("Net file already exists, skipping conversion.\n")

traffic_status = "Traffic generated."
route_file_entry = f''

try:
#STOPS HERE
log_file.write("Generating random traffic...\n")
log_file.flush()
random_trips_script = os.path.join(sumo_home, "tools", "randomTrips.py")

traffic_cmd = [
sys.executable, random_trips_script,
"-n", net_file,
"-e", "120",
"-o", trip_file,
"--route-file", route_file,
"--validate"
]

subprocess.run(
traffic_cmd,
env=env,
stdout=log_file,
stderr=log_file,
check=True,
timeout=45
)

except subprocess.TimeoutExpired:
traffic_status = "Warning: Traffic generation timed out. Loading empty map."
log_file.write("\n!!! TIMEOUT: Traffic generation killed.  !!!\n")
route_file_entry = ""
except Exception as e:
traffic_status = f"Warning: Traffic generation failed ({e}). Loading empty map."
log_file.write(f"\n!!! ERROR: {e} !!!\n")
route_file_entry = ""

config_content = f"""


{route_file_entry}





"""

with open(config_file, "w") as f:
f.write(config_content)

return f"Map Ready! {traffic_status} See '{log_path}' for details. Config: '{config_file}'"

except Exception as e:
return f"System Error: {str(e)}"
Вопрос
Известна ли это проблема с randomTrips.py в Windows при вызове через подпроцесс?

Как правильно вызывать randomTrips.py, чтобы он завершался правильно при программном использовании?


Подробнее здесь: https://stackoverflow.com/questions/798 ... er-force-t
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»