<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def execute(correlation_id, components, args = None):
 """ Executes multiple components. To be executed components must implement [[IExecutable]] interface. If they don't the call to this method has no effect. :param correlation_id: (optional) transaction id to trace execution through call chain. :param components: a list of components that are to be executed. :param args: execution arguments. :return: execution result """

        results = []

        if components == None:
            return

        args = args if args != None else Parameters()
        for component in components:
            result = Executor.execute_one(correlation_id, component, args)
            results.append(result)

        return results