在线程代码中查找函数执行与再次执行同一函数之间的时间间隔

Posted

技术标签:

【中文标题】在线程代码中查找函数执行与再次执行同一函数之间的时间间隔【英文标题】:To find time interval between execution of a function and again re execution of the same function in a threaded code 【发布时间】:2019-01-24 04:39:37 【问题描述】:

我在 python 中有一个线程代码,我需要找出执行函数 a 和再次执行同一函数之间的时间。该怎么做? 我尝试使用 timeit 模块但得到错误的结果

最少的代码是

def abc1 ():
  process 
def abc2():
  process 
def abc3:
  process

如上所述,有很多函数是线程化的,我想知道函数 abc1 是否在时间 0 执行,然后在多久之后 abc1 将再次执行

【问题讨论】:

请提供一个最小但完整的例子。 【参考方案1】:

如果您对装饰器和线程安全的概念感到满意,这里有一个解决方案:

import time
import threading

# Let us define a list that stores the execution start times
exec_history = []
# Define a lock which allows safe access to this list
list_lock = threading.Lock()

# Define a decorator, which will "log" the execution of its function to the list
def log_func_call(fn):
    def wrapper(*args, **kwargs):
        with list_lock:
            # Note down which function and when it was called.
            # Alternatively, you can also log to a file or terminal, etc.
            exec_history.append((fn, time.time()))  
        return fn(*args, **kwargs)

    return wrapper

# Decorate whichever method you want to track
@log_func_call
def abc1():
    pass

@log_func_call
def abc2():
    pass

exec_history 将在任何函数被调用时更新,以及它的开始时间。这是你要找的吗?

【讨论】:

以上是关于在线程代码中查找函数执行与再次执行同一函数之间的时间间隔的主要内容,如果未能解决你的问题,请参考以下文章

ios多线程中 同步异步与队列之间的关系

iOS面试系列-2多线程中同步异步和串行并行之间的逻辑关系(必考,必须掌握)

为啥 std::async 使用同一个线程运行函数

线程时的异常 - 线程之间的传播?

从 Flash 调用的 JavaScript 代码在哪个线程上执行?

进程池和线程池