承接 idimsh/parallel-processes 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

idimsh/parallel-processes

Composer 安装命令:

composer require idimsh/parallel-processes

包简介

Run multiple Symfony CLI processes in parallel.

README 文档

README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

##Still in progress ...

Installation

The preferred method of installation is via Composer. Run the following command to install the latest version of a package and add it to your project's composer.json:

composer require idimsh/parallel-processes

Purpose

To be able to run multiple shell commands in parallel, leveraging Symfony Process those running in the background. And be able to cease execution (stop all the processes) in case one of them failed.

Design

This package uses an event loop, currently ReactPHP event-loop is chosen, but this might change.
The event loop helps in being able to start the processes one by one in non blocking manner, and allowing monitoring them for non-zero exit faster.

Usage

Symfony Process can be constructed using an array or a string.
If constructed using an array, then each item will be shell escaped before forming the command line to be executed.
If constructed using a string, then it is assumed to already be shell escaped.

The second way is preferred.

On linux, exiting a running processes by signaling it works as long as the process is started using exec, otherwise, it can't really be stopped.

The best way is to construct the commands to be executed.

Example 1, no special handing.

$loop              = \React\EventLoop\Factory::create();
$newProcessFactory = new \idimsh\ParallelProcesses\NewProcessFactory();
$processesConfig   = \idimsh\ParallelProcesses\BackgroundProcessesConfig::create();

$parallel    = new \idimsh\ParallelProcesses\ParallelCliProcesses(
    $processesConfig,
    $newProcessFactory,
    $loop
);
$parallel->execWithLoop([
    'failed ls'         => \idimsh\ParallelProcesses\Command\SimpleCommand::fromString(
      'exec /bin/bash -c "ls -la /tmp/not-found"'
    )->setAsShellEscaped(true),
    
   'long failed grep exec in bash'         => \idimsh\ParallelProcesses\Command\SimpleCommand::fromString(
      'exec /bin/bash -c "sleep 3; grep --color -rHn \'random string not there\' /usr /var/"'
    )->setAsShellEscaped(true),
]);
$loop->run();

The two commands:

  • ls -la /tmp/not-found
  • grep --color -rHn \'random string not there\' /usr /var/

Will both run in parallel, and will both fail, the long running grep will continue to run despite that ls has failed already. Nothing will be output, since output is delegated to a logger interface and to callbacks.

Credits

License

Released under MIT License - see the License File for details.

统计信息

  • 总下载量: 13
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-04-17

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固