Advanced Usage Patterns
Decorator-Based Main Block Management
Dynamic Entry Point Control
def main_wrapper(func):
def wrapper():
print("Pre-execution setup")
func()
print("Post-execution cleanup")
return wrapper
@main_wrapper
def main():
print("Main execution")
if __name__ == "__main__":
main()
Conditional Execution Strategies
def debug_mode():
return True
def main():
if debug_mode():
print("Debug information enabled")
else:
print("Production mode")
if __name__ == "__main__":
main()
Execution Mode Patterns
Mode |
Characteristics |
Use Case |
Development |
Verbose logging |
Local testing |
Staging |
Limited logging |
Pre-production |
Production |
Minimal logging |
Live environment |
Multi-Module Execution Flow
graph TD
A[Main Script] --> B{Execution Context}
B -->|Development| C[Enable Detailed Logging]
B -->|Production| D[Minimal Logging]
C --> E[Execute Modules]
D --> E
Dependency Injection Technique
class ConfigManager:
def __init__(self, config_type='default'):
self.config_type = config_type
def create_main_executor(config_manager):
def main():
print(f"Executing with {config_manager.config_type} configuration")
return main
def main_factory():
dev_config = ConfigManager('development')
main_executor = create_main_executor(dev_config)
if __name__ == "__main__":
main_executor()
main_factory()
Advanced Error Handling
import logging
import sys
def configure_logging():
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s: %(message)s'
)
def robust_main():
try:
## Main script logic
result = complex_operation()
except Exception as e:
logging.error(f"Execution failed: {e}")
sys.exit(1)
def complex_operation():
## Simulated complex logic
pass
if __name__ == "__main__":
configure_logging()
robust_main()
Parallel Execution Patterns
from multiprocessing import Process
def worker_task(task_id):
print(f"Executing task {task_id}")
def main():
processes = [
Process(target=worker_task, args=(i,))
for i in range(3)
]
for p in processes:
p.start()
for p in processes:
p.join()
if __name__ == "__main__":
main()
- Use
__main__
for controlled script entry
- Implement lazy loading
- Minimize global variable usage
- Leverage LabEx's modular design principles
Context Management
class ScriptContext:
def __enter__(self):
print("Entering script context")
return self
def __exit__(self, exc_type, exc_value, traceback):
print("Exiting script context")
def main():
with ScriptContext():
## Script execution logic
pass
if __name__ == "__main__":
main()