Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/morjodrom/time-limiter
A small utilities library to provide loop scheduling
https://github.com/morjodrom/time-limiter
curl execution-time loop timeout
Last synced: about 2 months ago
JSON representation
A small utilities library to provide loop scheduling
- Host: GitHub
- URL: https://github.com/morjodrom/time-limiter
- Owner: Morjodrom
- License: mit
- Created: 2018-07-15T21:33:41.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-08-29T17:11:49.000Z (4 months ago)
- Last Synced: 2024-11-13T21:24:20.561Z (about 2 months ago)
- Topics: curl, execution-time, loop, timeout
- Language: PHP
- Size: 29.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: license
Awesome Lists containing this project
README
# Time Limiter
A small utility class to help to limit script execution time.# Basic usage
The class is usually used within loops with heavy time consumption.```php
// maximum time to execute one request
$REQUEST_TIMEOUT_SEC = 5;$curlClient = new SomeCurlClient(); // just an example.
// shared hosting often has a limit. E.g. 30 seconds
$maxExecutionTime = ini_get('max_execution_time');
$timeLimiter = new \timelimiter\TimeLimiter($maxExecutionTime, $REQUEST_TIMEOUT_SEC);// check if there is time left to prevent 504 timeout
// recommended
foreach($timeLimiter => $timeLeft){
$result = $curlClient->doSomeHeavyJob([
'timeout' => $REQUEST_TIMEOUT_SEC
]);
// handle the result
// ...
}// or alternatively while loop might be used with respective Iterator calls.
while($timeLimiter->valid()){
$result = $curlClient->doSomeHeavyJob([
'timeout' => $REQUEST_TIMEOUT_SEC
]);
$timeLimiter->next(); // must be called to adapt to long iterations
}
```# Installation
As a production dependency using [Composer](https://getcomposer.org/):composer require morjodrom/time-limiter
As a dev-dependency for deveopment-only cases:
composer require --dev morjodrom/time-limiter
# Constructor options
``int $limitSeconds`` - seconds to process. 0 equals to no limit.
Value from ``ini_get('max_execution_time')`` might be the desired option.``[int $preliminaryTimeout] = DEFAULT_TIME_UP_SECONDS = 3`` seconds to stop execution preliminary
before reaching the timeout.
``$preliminaryTimeout`` must be a bit greater that the longest *theoretical* operation you perform in a loop.
Therefore, the last risky operation that might exceed the execution time is omitted.
The class tracks the time spend on each iteration to update $preliminaryTimeout to equal the longest operation* ``[int|null $startTimestamp = $_SERVER['REQUEST_TIME']`` is used by default. Must be a timestamp
since Unix Epoch (January 1 1970 00:00:00 GMT), e.g. ``time()`` call.It is highly encouraged to use ``foreach`` construction. Raw ``while`` iteration also is
possible with correct Iterator calls
# Methods
``current(): int`` - returns number of seconds left before the timeout
``valid(): bool`` - returns if there is time left to perform the script safely
``next(): void`` - must be called after a finished iteration to adapt to unexpected long iterations# Support
Feel free to open an issue:# License - MIT