From 5345eb56005e6024d0bae78080fc64f922943829 Mon Sep 17 00:00:00 2001 From: Aaron Piotrowski Date: Mon, 20 Apr 2020 11:52:52 -0500 Subject: [PATCH] Add interval between starting each worker Experiment for #112. --- lib/Worker/TaskWorker.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/Worker/TaskWorker.php b/lib/Worker/TaskWorker.php index 1a3ac1ba..c03adabb 100644 --- a/lib/Worker/TaskWorker.php +++ b/lib/Worker/TaskWorker.php @@ -2,6 +2,7 @@ namespace Amp\Parallel\Worker; +use Amp\Delayed; use Amp\Failure; use Amp\Parallel\Context\Context; use Amp\Parallel\Context\StatusError; @@ -19,6 +20,9 @@ abstract class TaskWorker implements Worker const SHUTDOWN_TIMEOUT = 1000; const ERROR_TIMEOUT = 250; + /** @var Delayed */ + private static $throttle; + /** @var Context */ private $context; @@ -36,6 +40,10 @@ abstract class TaskWorker implements Worker */ public function __construct(Context $context) { + if (self::$throttle === null) { + self::$throttle = new Delayed(0); + } + if ($context->isRunning()) { throw new \Error("The context was already running"); } @@ -110,6 +118,10 @@ public function enqueue(Task $task): Promise throw new WorkerException("The worker crashed"); } + $delayed = self::$throttle; + self::$throttle = new Delayed(100); + yield $delayed; + $this->started = true; yield $this->context->start(); }