Golang记录、计算函数执行耗时、运行时间的一个简单方法

// 写超时警告日志 通用方法

func TimeoutWarning(tag, detailed string, start time.Time, timeLimit float64) {

  dis := time.Now().Sub(start).Seconds()

  if dis > timeLimit {

    log.Warning(log.CENTER_COMMON_WARNING, tag, " detailed:", detailed, "TimeoutWarning using", dis, "s")

    //pubstr := fmt.Sprintf("%s count %v, using %f seconds", tag, count, dis)

    //stats.Publish(tag, pubstr)

  }

}

这个函数的几个参数说明如下:
tag、detailed 表示超时发生位置的两个字符串参数。
start 程序开始执行的时间
timeLimit  函数执行超时阀值,单位是秒。
使用时,在每个函数的第一行有下面一段代码就行了:

//

func Save函数名(…) (…) {

  // 如果这个方法执行超时3秒,则会记录日志

  defer common.TimeoutWarning("SaveAppLogMain", "Total", time.Now(), float64(3))

  // … 函数自身的逻辑。

}

原文地址:https://www.cnblogs.com/smallleiit/p/10286296.html

时间: 2024-11-12 20:13:27

Golang记录、计算函数执行耗时、运行时间的一个简单方法的相关文章

C# .Net计算函数执行的时间

C#计算函数执行的时间 protected void StopwatchTest() { System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); // 开始监视代码 //_________________要执行的函数______________________ //Code…… stopwatch.Stop(); // 停止监视 TimeSpan timeSpa

UDF函数,hive调用java包简单方法

UDF函数,是hadoop在强大的大数据批量导入导出操作之余,为了满足复杂的数据逻辑操作留下的接口 核心思想:不管是UDF函数还是自定义处理jar包,都是要放置在hadoop服务器上的,相当于hadoop多出了一个自定义的处理数据的方法 1)其中调用的不管是参数还是数据库都是以hadoop本身的服务器环境路径为本地路径,而不是自己操作的java环境 2) 现在记录下2种近期使用过的简单方法,非常简单. 1.函数调用 1)导入UDF架包,保证引用UDF时不会编译报错 2)java中建任意类继承UD

C#计算一段程序运行时间的三种方法

第一种方法利用System.DateTime.Now static void SubTest() { DateTime beforDT = System.DateTime.Now; //耗时巨大的代码 DateTime afterDT = System.DateTime.Now; TimeSpan ts = afterDT.Subtract(beforDT); Console.WriteLine("DateTime总共花费{0}ms.", ts.TotalMilliseconds);

三种记录 MySQL 所执行过的 SQL 语句的方法

程式 Debug 有時後從前面第一行追起來很辛苦(程式碼太多或 compile 過), 另一種做法就是從後面追起來, 反正最後寫入的是 DB, 那就從 DB 開始往前推, 所以就是要抓程式是執行哪些 SQL 語法.(以下只以 MySQL 為主) 之前用過的追蹤法是用 tcpdump 或 wireshark 聽 3306 port,這個太苦, 就不再多說~ MySQL 有幾種方法可以用, 將以挑喜歡的其中一種, 加入 /etc/mysql/my.cnf(debian), 再 restart mys

php 设置一个函数的最大运行时间

如何防止一个函数执行时间过长呢?在PHP里可以用pcntl时钟信号+异常来实现 declare(ticks = 1); function a() { sleep(10); echo "a finishi\n"; } function b() { echo "Stop\n"; } function c() { usleep(100000); } function sig() { throw new Exception; } try { pcntl_alarm(1);

实现一个简单的curry函数

curry函数是向一个函数传入部分的参数,从而产生一个新的函数,来达到对函数实现套用的操作 首先我们为所有的函数原型添加一个方法 Function.prototype.method = function(name,func) { this.prototype[name] = func; return this; } 在这里我们为Function的原型对象添加了一个method方法 ,这样当我们为函数原型添加方法的时候,就直接添加到Function.prototype中 也就是说我们可以直接这样

Golang函数执行模板(log,耗时,panic)

有些函数执行前后,需要加日志.记录耗时.还要处理panic,都是些重复性的东西. 所以弄了个模板式的东西,碰到这类需求,直接把相关函数和参数,丢到run函数去就不用管了,省得浪费时间. 先上个调用例子: //函数执行模板 //author: Xiong Chuan Liang //date: 2015-3-19 package main import ( "fmt" "log" "os" "utils" ) func main

一个简单的使用Quartz和Oozie调度作业给大数据计算平台执行

一,介绍 Oozie是一个基于Hadoop的工作流调度器,它可以通过Oozie Client 以编程的形式提交不同类型的作业,如MapReduce作业和Spark作业给底层的计算平台(如 Cloudera Hadoop)执行. Quartz是一个开源的调度软件,它为任务的调度执行提供了各种触发器以及监听器 下面使用Quartz + Oozie 将一个MapReduce程序提交给Cloudera Hadoop执行 二,调度思路 ①为什么要用Quartz呢?主要是借助Quartz强大的触发器功能.它

12.7.2 创建日志记录计算

清单 12.24 首先实现两个辅助函数,用于读写控制台,且两者还会把消息写入日志,所以,它们将括在 log 计算块中.为了显示如何组合非标准计算,我们在第三个函数中,使用了两个函数.在前面的示例中,我们使用 let! 基本操作,在清单 12.24 还引入了 do!. 清单 12.24 使用计算表达式的日志 (F# Interactive) > let write(s) = log {    [1] <-- 写字符串到控制台和日志 do!logMessage("writing: &qu