Laravel 源码分析---Pineline

在 laravel 框架中,Illuminate\Pipeline\Pipeline 类是实现 laravel 中间件功能的重要工具之一。他的作用是,将一系列有序可执行的任务依次执行。也有人把这种功能成为管道模式,比如下面这篇文章的介绍:
Laravel 中管道设计模式的使用 —— 中间件实现原理探究

今天我们就来探究一下 Pipeline 类的功能和源码。

Pipeline 的使用

Pipeline(管道)顾名思义,就是将一系列任务按一定顺序在管道里面依次执行。其中任务可以是匿名函数,也可以是拥有特定方法的类或对象。

我看先来看一段 Pipeline 的使用代码,了解一下Pipeline 具体是如何使用的。

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Pipeline\Pipeline;

class Test extends Command
{
   
   
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'test';

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
   
   
        $task1 = function($passable, $next){
   
   
            $this->info('这是任务1');
            $this->info('任务1的参数 '.$passable);
            return $next($passable);
        };

        $task2 = function($passable, $next){
   
   
            $this->info('这是任务2');
            $this->info('任务2的参数 '.$passable);
            return  $next($passable);
        };

        $task3 = function($passable, $next){
   
   
            $this->info('这是任务3');
            $this->info('任务3的参数 '.$passable);
             return $next($passable);
        };


        $pipeline = new Pipeline();
        $rel = $pipeline->send('任务参数')
            ->through([$task1, $task2, $task3])
            ->then(function(){
   
   
                $this->info('then 方法');
                return 'then 方法的返回值';
            });

        $this->info($rel);
    }
}

运行上面代码,我们得到如下结果


                
PyKEEN是一个用于知识图谱嵌入(KGE)的Python库,其`pipeline`提供了一种便捷的方式来执行知识图谱嵌入模型的训练、评估等一系列任务。 ### 功能概述 `pipeline`函数将多个步骤集成在一起,包括数据加载、模型选择、训练、评估等,使用户可以通过简洁的代码完成复杂的知识图谱嵌入流程。 ### 基本使用示例 以下是一个简单的使用`pipeline`训练和评估一个知识图谱嵌入模型的示例代码: ```python from pykeen.pipeline import pipeline result = pipeline( dataset='Nations', model='TransE', training_kwargs=dict(num_epochs=5), evaluation_kwargs=dict(batch_size=128) ) # 保存模型 result.save_to_directory('nations_transe') ``` 在上述代码中: - `dataset='Nations'`:指定使用`Nations`数据集,这是一个内置的知识图谱数据集。 - `model='TransE'`:选择`TransE`作为知识图谱嵌入模型。 - `training_kwargs=dict(num_epochs=5)`:设置训练的参数,这里指定训练的轮数为5。 - `evaluation_kwargs=dict(batch_size=128)`:设置评估时的参数,这里指定评估的批次大小为128。 - `result.save_to_directory('nations_transe')`:将训练得到的结果保存到`nations_transe`目录中。 ### 可配置参数 - **数据集相关**:可以指定不同的数据集,如内置的`FB15k-237`、`WN18RR`等,也可以使用自定义的数据集。 - **模型相关**:支持多种知识图谱嵌入模型,如`DistMult`、`ComplEx`等。 - **训练相关**:可以配置训练的轮数、学习率、批次大小等参数。 - **评估相关**:可以配置评估的指标、批次大小等参数。 ### 高级用法 `pipeline`还支持更高级的用法,例如使用自定义的损失函数、优化器等。以下是一个使用自定义优化器的示例: ```python from pykeen.pipeline import pipeline from torch.optim import Adam result = pipeline( dataset='Nations', model='TransE', optimizer=Adam, optimizer_kwargs=dict(lr=0.001), training_kwargs=dict(num_epochs=5) ) ``` 在上述代码中,使用`Adam`优化器,并设置学习率为0.001。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值