duoduo / task
There is no license information available for the latest version (1.1) of this package.
1.1
2021-07-06 05:41 UTC
This package is auto-updated.
Last update: 2025-02-06 14:28:16 UTC
README
快速集成 composer require duoduo/task:dev-master 采用 NTaskManager //方法 NTaskManager::defaultManger(new NLogger()) ->setProgramNum(5) ->setDebug(true) ->addMultiTask($threadNum,__CLASS__, $method, array('i' => 0)) ->run(); //支持钉钉报警 $logger = new NDingDingLogger("https://oapi.dingtalk.com/robot/send?access_token=xx"); ztm->setTaskTimeoutHandler(new NDefaultTaskTimeoutHandler($logger)); 软重启 kill -1 pid //使用方式 $ztm = new NTaskManager(); //deamon 模式下完成一圈任务后进行stats 统计 $ztm->setStatsWhenReCreateTask(true); //检测到超时时,怎么处理 $ztm->setTaskTimeoutHandler(new NDefaultTaskTimeoutHandler()); //开启守护模式 $ztm->setDaemon(1); //开启追踪进程信息 在任务规定的时间内没有完成时开始。 $ztm->setTrace(true); //详细的运行日志 $ztm->setDebug(true); //日志怎么记录 $ztm->setLogger(new Logger()); //开启strace后,收集执行时间 $ztm->setParseExetime(10) //自定义超时确认机制 $ztm->setConfirmDieActionHandler(new NDefaultConfirmDieAction(10)); //设置一个进程执行多少次后, 退出,新建进程; 设置子进程执行次数 $ztm->setMaxProcessCount(30) for ($i = $params['i']; $i < $threadNum; $i++) { $ztm->add(__CLASS__, $method, (array($i))); } //简版创建多个进程方法 $ztm->addMultiTask($threadNum,__CLASS__, $method, array('i' => 0) ); $ztm->run(); /** * Interface IConfirmDieAction * @package LT\Duoduo\Task * @author duoduo */ interface IConfirmDieAction{ /** * @param array $stats * 数组类型, 元素是一个NStatContext ,统计回收数据,评估结束时间 * @return mixed */ public function stats($stats); /** * @param $data * 元素是一个NStatContext 返回任务任务已经挂掉的时间单位秒 * @return mixed */ public function getDieTimeout($data); } NDefaultConfirmDieAction 默认实现类 返回一个构造器的时间 /** * Interface ITaskTimeoutHandler * @package LT\Duoduo\Task * @author duoduo */ interface ITaskTimeoutHandler{ /** * @var NContext $context * 超时发生时, 怎么处理进程 */ public function processTimeout( $context); } NDefaultTaskTimeoutHandler 默认实现类, 调用NLogger 的notify接口 //demo use LT\Duoduo\Task\NTaskManager; use LT\Duoduo\Task\NDefaultTaskTimeoutHandler; use LT\Duoduo\Task\NLogger; class DuoduoTask extends BaseTask { public function importAction() { $method = 'processOrder'; $threadNum = 2; $ztm = new NTaskManager(); $ztm->setTaskTimeoutHandler(new NDefaultTaskTimeoutHandler(new NLogger())); $ztm->setLogger(new NLogger()); $ztm->setDebug(true); $ztm->addMultiTask($threadNum,__CLASS__, $method, array('i' => 0) ); $ztm->setStatsWhenReCreateTask(true); $ztm->setTrace(true); $ztm->setParseExetime(10); $ztm->setDaemon(1); $ztm->run(); NTaskManager::defaultManger(new NLogger()) ->setProgramNum(5) ->setDebug(true) ->addMultiTask($threadNum,__CLASS__, $method, array('i' => 0)) ->run(); } public function processOrder($i){ $sleep = 0; if($i % 3 == 1){ $sleep = 10; } $pid = $this->getpid(); file_put_contents("/tmp/run.log", ("processOrder sleep {$sleep} pid $pid end " . $i . "\r\n"), FILE_APPEND); } public function socket(){ $fp = fsockopen("tcp://redis", 6379, $errno, $errstr); if (!$fp) { echo "ERROR: $errno - $errstr<br />\n"; } else { fwrite($fp, "\n"); echo fread($fp, 1026); // fclose($fp); } } }