1. <?php
  2. class TaskQueue {
  3. private $queue = [];
  4. private $max_tasks = 10; // Limit number of tasks in the queue
  5. public function enqueue(string $dataset_name, callable $task_function) {
  6. // Add task to the queue
  7. $this->queue[] = [
  8. 'dataset' => $dataset_name,
  9. 'task' => $task_function,
  10. ];
  11. // Limit queue size
  12. if (count($this->queue) > $this->max_tasks) {
  13. $this->dequeue(); // Remove the oldest task if queue is full
  14. }
  15. }
  16. private function dequeue() {
  17. if (!empty($this->queue)) {
  18. array_shift($this->queue); // Remove the first element (oldest task)
  19. }
  20. }
  21. public function process() {
  22. while (!empty($this->queue)) {
  23. $task = array_shift($this->queue); // Get the next task
  24. $dataset_name = $task['dataset'];
  25. $task_function = $task['task'];
  26. try {
  27. // Basic sanity checks
  28. if (empty($dataset_name)) {
  29. throw new Exception("Dataset name cannot be empty.");
  30. }
  31. if (!is_callable($task_function)) {
  32. throw new Exception("Task function is not callable.");
  33. }
  34. // Execute the task
  35. $task_function($dataset_name); // Execute the task with the dataset name
  36. echo "Processed dataset: $dataset_name\n"; // Log the processing
  37. } catch (Exception $e) {
  38. echo "Error processing dataset $dataset_name: " . $e->getMessage() . "\n"; // Log errors
  39. }
  40. }
  41. }
  42. public function getQueueSize(): int {
  43. return count($this->queue);
  44. }
  45. }
  46. // Example usage:
  47. // Define some dummy task functions
  48. function processDataset1(string $dataset_name) {
  49. echo "Simulating processing of dataset: $dataset_name\n";
  50. // Add your actual dataset processing logic here
  51. }
  52. function processDataset2(string $dataset_name) {
  53. echo "Simulating processing of dataset: $dataset_name\n";
  54. }
  55. // Create a TaskQueue instance
  56. $queue = new TaskQueue();
  57. // Enqueue some tasks
  58. $queue->enqueue("data_set_a", 'processDataset1');
  59. $queue->enqueue("data_set_b", 'processDataset2');
  60. $queue->enqueue("data_set_c", function (string $dataset_name) {
  61. echo "Custom processing of dataset: $dataset_name\n";
  62. });
  63. $queue->enqueue("data_set_d", 'processDataset1');
  64. $queue->enqueue("data_set_e", 'processDataset2');
  65. $queue->enqueue("data_set_f", function (string $dataset_name) {
  66. echo "Custom processing of dataset: $dataset_name\n";
  67. });
  68. $queue->enqueue("data_set_g", 'processDataset1');
  69. $queue->enqueue("data_set_h", 'processDataset2');
  70. $queue->enqueue("data_set_i", function (string $dataset_name) {
  71. echo "Custom processing of dataset: $dataset_name\n";
  72. });
  73. $queue->enqueue("data_set_j", 'processDataset1'); //Will trigger dequeue, as queue is now at max size.
  74. // Process the queue
  75. $queue->process();
  76. ?>

Add your comment