@@ -321,22 +321,31 @@ def start():
321321 # Auto-detect: CPU cores - 2, minimum 1
322322 cpu_count = os .cpu_count () or 1
323323 num_workers = max (1 , cpu_count - 2 )
324- log .info (f"Auto-detected { cpu_count } CPU cores, using { num_workers } workers" )
324+ auto_msg = f"Auto-detected { cpu_count } CPU cores, using { num_workers } workers"
325+ print (auto_msg )
326+ log .info (auto_msg )
325327
326328 # Get total devices, limit worker count to not exceed device count
327329 all_devices = container .config ()["devices" ]
328330 total_devices = len (all_devices )
329331 if num_workers > total_devices :
330- log .warning (f"Worker count ({ num_workers } ) exceeds device count ({ total_devices } ), "
331- f"adjusting to { total_devices } workers" )
332+ adjust_msg = (f"Worker count ({ num_workers } ) exceeds device count ({ total_devices } ), "
333+ f"adjusting to { total_devices } workers" )
334+ print (adjust_msg )
335+ log .warning (adjust_msg )
332336 num_workers = total_devices
333337
334338 if num_workers > 1 :
335339 # Multi-worker mode: auto-start multiple processes
336- log .info ("=" * 60 )
337- log .info (f"Starting Simunet with { num_workers } workers (multi-process mode)" )
338- log .info (f"Note: Auto-reload is disabled in multi-worker mode" )
339- log .info ("=" * 60 )
340+ startup_msg = [
341+ "=" * 60 ,
342+ f"Starting Simunet with { num_workers } workers (multi-process mode)" ,
343+ f"Note: Auto-reload is disabled in multi-worker mode" ,
344+ "=" * 60
345+ ]
346+ for msg in startup_msg :
347+ print (msg )
348+ log .info (msg )
340349
341350 # Create and start multiple processes
342351 processes = []
@@ -347,36 +356,56 @@ def start():
347356 name = f"simunet-worker-{ worker_id } "
348357 )
349358 p .start ()
350- log .info (f"✓ Worker { worker_id } /{ num_workers } started (PID: { p .pid } )" )
359+ worker_msg = f"✓ Worker { worker_id } /{ num_workers } started (PID: { p .pid } )"
360+ print (worker_msg )
361+ log .info (worker_msg )
351362 processes .append (p )
352363
353- log .info ("=" * 60 )
354- log .info ("All workers started successfully!" )
355- log .info (f"Press Ctrl+C to stop all workers" )
356- log .info ("=" * 60 )
364+ completion_msg = [
365+ "=" * 60 ,
366+ "All workers started successfully!" ,
367+ f"Press Ctrl+C to stop all workers" ,
368+ "=" * 60
369+ ]
370+ for msg in completion_msg :
371+ print (msg )
372+ log .info (msg )
357373
358374 # Wait for all processes
359375 try :
360376 for p in processes :
361377 p .join ()
362378 except KeyboardInterrupt :
363- log .info ("\n " + "=" * 60 )
364- log .info ("Stopping all workers..." )
365- log .info ("=" * 60 )
379+ shutdown_msg = [
380+ "\n " + "=" * 60 ,
381+ "Stopping all workers..." ,
382+ "=" * 60
383+ ]
384+ for msg in shutdown_msg :
385+ print (msg )
386+ log .info (msg )
387+
366388 for p in processes :
367389 p .terminate ()
368390 for p in processes :
369391 p .join ()
370- log .info ("✓ All workers stopped" )
392+
393+ stop_msg = "✓ All workers stopped"
394+ print (stop_msg )
395+ log .info (stop_msg )
371396 else :
372397 # Single-worker mode: start all devices
373- log .info ("Starting in single-worker mode (all devices)" )
398+ startup_msg = f"Starting in single-worker mode (all { total_devices } devices)"
399+ print (startup_msg )
400+ log .info (startup_msg )
374401
375402 # Handle reload flag
376403 reload = args .reload and not args .no_reload
377404
378405 if reload :
379- log .info ("Auto-reload is enabled for development" )
406+ reload_msg = "Auto-reload is enabled for development"
407+ print (reload_msg )
408+ log .info (reload_msg )
380409
381410 uvicorn .run (
382411 "netdriver_simunet.main:app" ,
0 commit comments