ActionScheduler_QueueRunner::run
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{}
Hooks from the method
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() 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;
}