文档章节

Task_worker 简单流程

304158
 304158
发布于 2017/06/28 11:11
字数 577
阅读 448
收藏 0

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

1.Task_worker_num 

配置task进程的数量,配置此参数后将会启用task功能。所以swoole_server务必要注册onTask/onFinish2个事件回调函数。如果没有注册,服务器程序将无法启动。

function onTask(swoole_server $serv, int $task_id, int $src_worker_id, mixed $data);
/*

    $task_id是任务ID,由swoole扩展内自动生成,
    用于区分不同的任务。$task_id和$src_worker_id组合起来才是全局唯的,
    不同的worker进程投递的任务ID可能会有相同
    $src_worker_id来自于哪个worker进程
    $data 是任务的内容

*/
void onFinish(swoole_server $serv, int $task_id, string $data)

/*
    $task_id是任务的ID
    $data是任务处理的结果内容
task进程会通过swoole_server->finish()方法将任务处理的结果发送给worker进程


*/

例如

Task_worker_num  = 100

Task 任务池中,能够创建100个Task 处理任务.

可以制定要给投递给哪个task进程,传入ID即可,范围是0 - (serv->task_worker_num -1)

Task异步的进程

TaskWaitMulti并发多个Task进程

$tasks[] = mt_rand(1000, 9999); //任务1
$tasks[] = mt_rand(1000, 9999); //任务2
$tasks[] = mt_rand(1000, 9999); //任务3
var_dump($tasks);

//等待所有Task结果返回,超时为10s
$results = $serv->taskWaitMulti($tasks, 10.0);

if (!isset($results[0])) {
    echo "任务1执行超时了\n";
}
if (isset($results[1])) {
    echo "任务2的执行结果为{$results[1]}\n";
}
if (isset($results[2])) {
    echo "任务3的执行结果为{$results[2]}\n";
}

Taskwait 阻塞的进程

<?php


    $serv = new swoole_server("127.0.0.1", 9501);
    $serv->set(array(
        'worker_num' => 4,
        'daemonize' => false,
        'dispatch_mode'=>2,
        'task_worker_num'=>100,

    ));
    //启动服务器
    $serv->on('start',function ($serv) {  //服务器启动回调
            echo "+++++++启动了一个SWOOLE++++++++";

    });
    //服务器启动的Worker进程
    $serv->on('WorkerStart',function ($serv,$worker_id){
        //echo $worker_id."Worker\n";

    });

    $serv->on('connect', function ($serv, $fd){  // 客户端链接服务器回调
        echo "\n====================================\n";
        foreach($serv->connections as $k=>$v)
        {
            var_dump($k,$v);
        }
        echo "====================================\n";


    });

    $serv->on('receive', function ($serv, $fd, $from_id, $data) {//接收到来自客户端信息的回调
        $serv->tick(10000, function() use ($serv, $fd) {

           /* $serv->task("taskcallback", -1, function (swoole_server $serv, $task_id, $data) use($fd) {
                var_dump($task_id, $data);
                $serv->send($fd, $serv->worker_id."task");
            });*/
           $ob = $serv->task("进行一次异步");
            $serv->send($fd, $serv->worker_id."task");

        });

    });

    $serv->on('close', function ($serv, $fd) {//关闭于客户端的链接回调
        echo "ID=".$fd.":一个链接关闭了.\n";
    });



    //task 回调
    $serv->on('task',function ($serv,$task_id,$src_worker_id,$data){
        echo "创建了一个task\n";
        $serv->finish($data);
    });
    //task 任务完成回调
    $serv->on('finish',function ($serv,$task_id,$data){
        echo $data."->>>>>由finish完成传递\n";
    });

        $serv->start();//运行服务

 

304158
粉丝 1
博文 105
码字总数 30016
作品 0
大兴安岭
私信 提问
加载中
请先登录后再评论。
swoole(6)Task异步任务

一:什么是task进程? task进程是独立与worker进程的一组进程 ,他主要处理耗时较长的业务逻辑,并且不影响worker进程处理客户端的请求.worker进程通过task()函数把数据投递到Task进程去处理 开启...

osc_ikbuen62
04/16
2
0
ThreadPoolExecutor源码解析(二)

1.ThreadPoolExcuter运行实例   首先我们先看如何新建一个ThreadPoolExecutor去运行线程。然后深入到源码中去看ThreadPoolExecutor里面使如何运作的。 public class Test { 新建一个线程池...

osc_xgq4n4ik
2018/05/31
1
0
DM 源码阅读系列文章(三)数据同步处理单元介绍

作者:lan 本文为 DM 源码阅读系列文章的第三篇,上篇文章 介绍了 DM 的整体架构,DM 组件 DM-master 和 DM-worker 的入口代码,以及两者之间的数据交互模型。本篇文章详细地介绍 DM 数据同步...

TiDB
2019/04/11
44
0
Apache Spark 的设计与实现(总体介绍)

概览 拿到系统后,部署系统是第一件事,那么系统部署成功以后,各个节点都启动了哪些服务? 部署图 从部署图中可以看到 整个集群分为 Master 节点和 Worker 节点,相当于 Hadoop 的 Master 和...

脸大的都是胖纸
2016/09/21
56
0
spark运行模式

Local模式 运行Spark最简单的方法是通过Local模式(即伪分布式模式)。 运行命令为:./bin/run-example org.apache.spark.examples.SparkPi local 基于standalone的Spark架构与作业执行流程 ...

张欢19933
2016/02/18
100
1

没有更多内容

加载失败,请刷新页面

加载更多

Day 4 掌握pip命令,管理好你的Python资源包

在文章底部你的每一次随手 → 分享、点赞、在看都很重要,感谢!!! 精华推荐:精选20篇满足你对前沿理论、技术和经验总结 开源优测专辑集合: 1. 前沿理论、工具和趋势总结 2. 快学Python3...

苦叶子
07/02
0
0
Motan中使用异步RPC接口

这周六参加了一个美团点评的技术沙龙,其中一位老师在介绍他们自研的 RPC 框架时提到一点:RPC 请求分为 sync,future,callback,oneway,并且需要遵循一个原则:能够异步的地方就不要使用同...

Java公众号_Kirito的技术分享
2017/12/27
3
0
JS逆向 | 防脱发的秘诀

作者:Jerryning 公众号:Python编程与实战 hello,大jia好,又到了练手时间了,这是我给大伙分享的第…篇逆向文章。前面的几篇猛戳下面: Python爬虫之JS逆向入门篇 JS逆向之新榜登录 JS逆向...

州的先生
2019/08/27
0
0
python练习-001

从今天起,我们进入python的学习,会根据每天一个案例的方法,由浅入深的学习python。 python学习对于初学者来说,最大的问题在于不知道自己学了能做啥,每天敲这些无聊的代码很枯燥,所以学...

致码高胜寒
2019/01/16
11
0
yolov5 简单教程

该库代表Ultralytics对未来对象检测方法的开源研究,并结合了以前的YOLO库https://github.com/ultralytics/yolov3在自定义数据集上训练了数千个模型而得到的最佳实践。**所有代码和模型都在积...

人工智能遇见磐创
54分钟前
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部