workerman定时器使用 php定时任务
- add
- int \Workerman\Lib\Timer::add(float $time_interval, callable $callback [,$args = array(), bool $persistent = true])
- 定时执行某个函数或者类方法
- 参数
- time_interval
- 多长时间执行一次,单位秒,支持小数,可以精确到0.001,即精确到毫秒级别。
- callback
- 回调函数注意:如果回调函数是类的方法,则方法必须是public属性
- args
- 回调函数的参数,必须为数组,数组元素为参数值
- persistent
- 是否是持久的,如果只想定时执行一次,则传递false(只执行一次的任务在执行完毕后会自动销毁,不必调用Timer::del())。默认是true,即一直定时执行。
- 返回值
- 返回一个整数,代表计时器的timerid,可以通过调用Timer::del($timerid)销毁这个计时器。
- 示例
- 1、定时函数为匿名函数(闭包)
- use \Workerman\Worker;
- use \Workerman\Lib\Timer;
- require_once './Workerman/Autoloader.php';
- $task = new Worker();
- // 开启多少个进程运行定时任务,注意多进程并发问题
- $task->count = 1;
- $task->onWorkerStart = function($task)
- {
- // 每2.5秒执行一次
- $time_interval = 2.5;
- Timer::add($time_interval, function()
- {
- echo "task run\n";
- });
- };
- // 运行worker
- Worker::runAll();
- 2、定时函数为普通函数
- require_once './Workerman/Autoloader.php';
- use \Workerman\Worker;
- use \Workerman\Lib\Timer;
- // 普通的函数
- function send_mail($to, $content)
- {
- echo "send mail ...\n";
- }
- $task = new Worker();
- $task->onWorkerStart = function($task)
- {
- $to = 'workerman@workerman.net';
- $content = 'hello workerman';
- // 10秒后执行发送邮件任务,最后一个参数传递false,表示只运行一次
- Timer::add(10, 'send_mail', array($to, $content), false);
- };
- // 运行worker
- Worker::runAll();
- 3、定时函数为类的方法
- require_once './Workerman/Autoloader.php';
- use \Workerman\Worker;
- use \Workerman\Lib\Timer;
- class Mail
- {
- // 注意,回调函数属性必须是public
- public function send($to, $content)
- {
- echo "send mail ...\n";
- }
- }
- $task = new Worker();
- $task->onWorkerStart = function($task)
- {
- // 10秒后发送一次邮件
- $mail = new Mail();
- $to = 'workerman@workerman.net';
- $content = 'hello workerman';
- Timer::add(10, array($mail, 'send'), array($to, $content), false);
- };
- // 运行worker
- Worker::runAll();
- 4、定时函数为类方法(类内部使用定时器)
- require_once './Workerman/Autoloader.php';
- use \Workerman\Worker;
- use \Workerman\Lib\Timer;
- class Mail
- {
- // 注意,回调函数属性必须是public
- public function send($to, $content)
- {
- echo "send mail ...\n";
- }
- public function sendLater($to, $content)
- {
- // 回调的方法属于当前的类,则回调数组第一个元素为$this
- Timer::add(10, array($this, 'send'), array($to, $content), false);
- }
- }
- $task = new Worker();
- $task->onWorkerStart = function($task)
- {
- // 10秒后发送一次邮件
- $mail = new Mail();
- $to = 'workerman@workerman.net';
- $content = 'hello workerman';
- $mail->sendLater($to, $content);
- };
- // 运行worker
- Worker::runAll();
- 5、定时函数为类的静态方法
- require_once './Workerman/Autoloader.php';
- use \Workerman\Worker;
- use \Workerman\Lib\Timer;
- class Mail
- {
- // 注意这个是静态方法,回调函数属性也必须是public
- public static function send($to, $content)
- {
- echo "send mail ...\n";
- }
- }
- $task = new Worker();
- $task->onWorkerStart = function($task)
- {
- // 10秒后发送一次邮件
- $to = 'workerman@workerman.net';
- $content = 'hello workerman';
- // 定时调用类的静态方法
- Timer::add(10, array('Mail', 'send'), array($to, $content), false);
- };
- // 运行worker
- Worker::runAll();
- 6、定时函数为类的静态方法(带命名空间)
- namespace Task;
- require_once './Workerman/Autoloader.php';
- use \Workerman\Worker;
- use \Workerman\Lib\Timer;
- class Mail
- {
- // 注意这个是静态方法,回调函数属性也必须是public
- public static function send($to, $content)
- {
- echo "send mail ...\n";
- }
- }
- $task = new Worker();
- $task->onWorkerStart = function($task)
- {
- // 10秒后发送一次邮件
- $to = 'workerman@workerman.net';
- $content = 'hello workerman';
- // 定时调用带命名空间的类的静态方法
- Timer::add(10, array('\Task\Mail', 'send'), array($to, $content), false);
- };
- // 运行worker
- Worker::runAll();
- 7、定时器中销毁当前定时器(use闭包方式传递$timer_id)
- use \Workerman\Worker;
- use \Workerman\Lib\Timer;
- require_once './Workerman/Autoloader.php';
- $task = new Worker();
- $task->onWorkerStart = function($task)
- {
- // 计数
- $count = 1;
- // 要想$timer_id能正确传递到回调函数内部,$timer_id前面必须加地址符 &
- $timer_id = Timer::add(1, function()use(&$timer_id, &$count)
- {
- echo "Timer run $count\n";
- // 运行10次后销毁当前定时器
- if($count++ >= 10)
- {
- echo "Timer::del($timer_id)\n";
- Timer::del($timer_id);
- }
- });
- };
- // 运行worker
- Worker::runAll();
- 8、定时器中销毁当前定时器(参数方式传递$timer_id)
- require_once './Workerman/Autoloader.php';
- use \Workerman\Worker;
- use \Workerman\Lib\Timer;
- class Mail
- {
- public function send($to, $content, $timer_id)
- {
- // 临时给当前对象添加一个count属性,记录定时器运行次数
- $this->count = empty($this->count) ? 1 : $this->count;
- // 运行10次后销毁当前定时器
- echo "send mail {$this->count}...\n";
- if($this->count++ >= 10)
- {
- echo "Timer::del($timer_id)\n";
- Timer::del($timer_id);
- }
- }
- }
- $task = new Worker();
- $task->onWorkerStart = function($task)
- {
- $mail = new Mail();
- // 要想$timer_id能正确传递到回调函数内部,$timer_id前面必须加地址符 &
- $timer_id = Timer::add(1, array($mail, 'send'), array('to', 'content', &$timer_id));
- };
- // 运行worker
- Worker::runAll();
- 9、只在指定进程中设置定时器
- 一个worker实例有4个进程,只在id编号为0的进程上设置定时器。
- use Workerman\Worker;
- use Workerman\Lib\Timer;
- require_once './Workerman/Autoloader.php';
- $worker = new Worker();
- $worker->count = 4;
- $worker->onWorkerStart = function($worker)
- {
- // 只在id编号为0的进程上设置定时器,其它1、2、3号进程不设置定时器
- if($worker->id === 0)
- {
- Timer::add(1, function(){
- echo "4个worker进程,只在0号进程设置定时器\n";
- });
- }
- };
- // 运行worker
- Worker::runAll();
workerman定时器使用 php定时任务的更多相关文章
- workerman定时器使用
From: http://doc3.workerman.net/worker-development/add.html add int \Workerman\Lib\Timer::add(float ...
- thinkphp5使用workerman定时器定时爬取某站点新闻资讯等内容
1.首先通过 composer 安装workerman,在thinkphp5完全开发手册的扩展->coposer包->workerman有详细说明: #在项目根目录执行以下指令compos ...
- Quartz cron 表达式(linux 定时器,java 定时任务,spring task定时任务)
原文地址:https://blog.csdn.net/feng27156/article/details/39293403 Quartz cron 表达式的格式十分类似于 UNIX cron 格式,但 ...
- 动态添加定时任务-quartz定时器
Quartz动态添加.修改和删除定时任务 在项目中有一个需求,需要灵活配置调度任务时间,刚开始用的Java自带的java.util.Timer类,通过调度一个java.util.TimerTask任务 ...
- Java开发笔记(九十九)定时器与定时任务
前面介绍了线程的几种运行方式,不管哪种方式,一旦调用了线程实例的start方法,都会立即启动线程的事务处理.然而某些业务场景在事务执行时间方面有特殊需求,例如期望延迟若干时间之后才开始事务运行,又如期 ...
- [spring-framework]Spring定时器的配置和使用
开发中我们常常会做一些定时任务,这些任务有开始时间,并会按一定的周期或规则执行.如此我们在Java程序开发中使用定时器来处理定时任务. <!-- MessageRequestTask类中包含了m ...
- angularjs定时任务的设置与清除
人们似乎常常将AngularJS中 的$timeOut() $interval()函数看做是一个内置的.无须在意的函数.但是,如果你忘记了$timeOut()$interval()的回调函数将会造成 ...
- storm定时器timer源码分析-timer.clj
storm定时器与java.util.Timer定时器比较相似.java.util.Timer定时器实际上是个线程,定时调度所拥有的TimerTasks:storm定时器也有一个线程负责调度所拥有的& ...
- java定时器2-spring实现
spring定时器(基于xml) spring定时器(基于注解) quartz定时器 1.使用基于xml配置的spring定时器 首先编写定时任务类Mytask public class Mytask ...
随机推荐
- ASP.NET MVC分页 Ajax+JsRender
前段时间整mvc的分页,倒是很顺利,参考了以下几篇博客,启发很大. http://www.cnblogs.com/tangmingjun/archive/2012/05/30/2526301.html ...
- android开发(45) 自定义软键盘(输入法)
概述 在项目开发中遇到一个需求,”只要数字键盘的输入,仅仅有大写字母的输入,某些输入法总是会提示更新,弹出广告等“,使得我们需要自定义输入. 关联到的知识 KeyboardView 一个视图 ...
- ECS Linux服务器xfs磁盘扩容
ECS Linux服务器xfs磁盘扩 ECS Linux服务器xfs磁盘使用阿里云官方提供的磁盘扩容方法扩容会有报错: [root@iZ28u04wmy2Z ~]# e2fsck /dev/xvdb1 ...
- 我最喜欢的jQuery插件模板
我使用jQuery已经有相当长的时间了,并且我会常常为它写一些插件(plugin).我尝试过用不同的方式去写,现在这个模板是我最喜欢的: 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...
- mtrace检查内存泄漏
内存泄漏检查方法(for Linux) 如果你更想读原始文档, 请参考glibc info的"Allocation Debugging" 一章 (执行info libc);glib ...
- Mac使用git/github小结
介绍 git 版本控制系统 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度快 2. github是一个git项目托管网站 注册地 ...
- SpringBoot系列三:SpringBoot基本概念(统一父 pom 管理、SpringBoot 代码测试、启动注解分析、配置访问路径、使用内置对象、项目打包发布)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.了解SpringBoot的基本概念 2.具体内容 在之前所建立的 SpringBoot 项目只是根据官方文档实现的一个基础程 ...
- MySQL中ALTER ,CHANGE , MODIFY
ALTER TABLE project_list CHANGE COLUMN descriptionofproj proj_desc VARCHAR(100), CHANGE COLUMN contr ...
- svn -- 数据备份,版本回退,版本冲突,多仓库配置
数据备份 差异存储法: 版本回退 版本冲突 原理图: 解决办法: 三种方案: 1)合理分配项目开发模块 wangcai:文章,邮件,会员 xiaoqiang:静态化,缓存,前台 2)合理分配项目开发时 ...
- python模块之psutil详解
一.psutil模块: 1.psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息 ...