Queuing long-running tasks

Do you have long-running or performance-heavy tasks in your application?

What about performing complex actions when a user completes a task, such as submitting a form?

What if the action took several seconds or minutes to complete?

The user would assume their submission failed and may either leave or submit the form again and cause duplicate submissions.

Instead, maybe use a queue.

When the user submits the form, all you need to do is create a queue item for that submission and let the form submit as normal.

In the background, the queue items will be processed when they can take more time or memory to perform the tasks and without blocking the user - giving them a better experience.

Drupal supports queues by default, storing queue items in its database.

For an example, see the Private Message Queue module on Drupal.org.

I wrote it for a client project to use queues when sending private messages to event attendees, which could be hundreds per event.

Without a queue, the request would have taken a long time to complete, or likely timed out.