ActionScheduler_QueueRunner::runpublicWC 1.0

Process actions in the queue. Attached to self::WP_CRON_HOOK i.e. action_scheduler_run_queue

The $context param of this method defaults to 'WP Cron', because prior to Action Scheduler 3.0.0 that was the only context in which this method was run, and the self::WP_CRON_HOOK hook had no context passed along with it. New code calling this method directly, or by triggering the self::WP_CRON_HOOK, should set a context as the first parameter. For an example of this, refer to the code seen in

Method of the class: ActionScheduler_QueueRunner{}

Returns

int. The number of actions processed.

Usage

$ActionScheduler_QueueRunner = new ActionScheduler_QueueRunner();
$ActionScheduler_QueueRunner->run( $context );
$context(string)
Optional identifier for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron' Generally, this should be capitalised and not localised as it's a proper noun.
Default: 'WP Cron'

Notes

See: ActionScheduler_AsyncRequest_QueueRunner::handle()

ActionScheduler_QueueRunner::run() code WC 11.1.2

public function run( $context = 'WP Cron' ) {
	ActionScheduler_Compatibility::raise_memory_limit();
	ActionScheduler_Compatibility::raise_time_limit( $this->get_time_limit() );

	do_action( 'action_scheduler_before_process_queue' );

	$cleanup_time_limit = 10 * $this->get_time_limit();
	// Backward compatibility: If the action cleaner is standard, cleaning will be performed as an action to improve throughput
	// and enable daily runs. If not, cleaning will occur explicitly before processing actions to ensure backward compatibility.
	if ( $this->is_custom_cleaner ) {
		// Execute complete cleanup cycle, as in this logical branch deletion IS NOT executed via a separate action.
		$this->cleaner->clean( $cleanup_time_limit );
	} else {
		// Execute partial cleanup cycle, as in this logical branch deletion IS executed via a separate action.
		$this->cleaner->reset_timeouts( $cleanup_time_limit );
		$this->cleaner->mark_failures( $cleanup_time_limit );
	}

	$this->processed_actions_count = 0;
	if ( false === $this->has_maximum_concurrent_batches() ) {
		$batch_size = apply_filters( 'action_scheduler_queue_runner_batch_size', 25 );
		// Note: gc_collect_cycles() was considered here and in do_batch/clear_caches, but rejected:
		// upside is speculative, GC sweep cost scales with object count and can cause pauses.
		do {
			$processed_actions_in_batch     = $this->do_batch( $batch_size, $context );
			$this->processed_actions_count += $processed_actions_in_batch;
		} while ( $processed_actions_in_batch > 0 && ! $this->batch_limits_exceeded( $this->processed_actions_count ) ); // keep going until we run out of actions, time, or memory.
	}

	do_action( 'action_scheduler_after_process_queue' );
	return $this->processed_actions_count;
}