瀏覽代碼

Use amphp/parallel-functions to speed up processing

shalvah 4 年之前
父節點
當前提交
20980712e5
共有 2 個文件被更改,包括 9 次插入6 次删除
  1. 1 0
      composer.json
  2. 8 6
      src/Extracting/DatabaseTransactionHelpers.php

+ 1 - 0
composer.json

@@ -19,6 +19,7 @@
     "php": ">=7.2.5",
     "ext-fileinfo": "*",
     "ext-json": "*",
+    "amphp/parallel-functions": "^1.0",
     "erusev/parsedown": "^1.7.4",
     "fakerphp/faker": "^1.9.1",
     "illuminate/console": "^6.0|^7.0|^8.0",

+ 8 - 6
src/Extracting/DatabaseTransactionHelpers.php

@@ -7,6 +7,8 @@ use Knuckles\Scribe\Exceptions\DatabaseTransactionsNotSupported;
 use Knuckles\Scribe\Exceptions\ScribeException;
 use Knuckles\Scribe\Tools\ConsoleOutputUtils as c;
 use Knuckles\Scribe\Tools\DocumentationConfig;
+use function Amp\ParallelFunctions\parallelMap;
+use function Amp\Promise\wait;
 
 trait DatabaseTransactionHelpers
 {
@@ -14,14 +16,14 @@ trait DatabaseTransactionHelpers
     {
         $connections = array_keys(config('database.connections', []));
 
-        foreach ($connections as $connection) {
+        wait(parallelMap($connections, function ($connection) {
             try {
                 $driver = app('db')->connection($connection);
 
                 if (self::driverSupportsTransactions($driver)) {
                     $driver->beginTransaction();
 
-                    continue;
+                    return;
                 }
 
                 $driverClassName = get_class($driver);
@@ -35,7 +37,7 @@ trait DatabaseTransactionHelpers
                 throw $e;
             } catch (Exception $e) {
             }
-        }
+        }));
     }
 
     /**
@@ -45,21 +47,21 @@ trait DatabaseTransactionHelpers
     {
         $connections = array_keys(config('database.connections', []));
 
-        foreach ($connections as $connection) {
+        wait(parallelMap($connections, function ($connection) {
             try {
                 $driver = app('db')->connection($connection);
 
                 if (self::driverSupportsTransactions($driver)) {
                     $driver->rollBack();
 
-                    continue;
+                    return;
                 }
 
                 $driverClassName = get_class($driver);
                 c::warn("Database driver [$driverClassName] for the connection [{$connection}] does not support transactions. Any changes made to your database have been persisted.");
             } catch (Exception $e) {
             }
-        }
+        }));
     }
 
     private static function driverSupportsTransactions($driver): bool