1. A method comprises: assigning tasks for packet processing to a plurality of programming engines; establishing programming stages corresponding to the plurality of programming engines; and, establishing a plurality of pipelines between the programming stages.