python-3.x - 在不影响它的情况下测量 python 代码的性能
问题描述
我想知道发布和获得回复需要多少时间。我可以使用代码来执行此操作,但是此代码的问题是要花费一些时间,这将影响整个 t0 到响应时间t1
。t0
是否有另一种方法可以获取与主代码并行运行而不影响它的时间戳?
diff=[]
t0=[];=t1=[];response_time=[]
while i<1000:
response_rcvd=False
t0.append(time.time())
client.publish()
t1.append(time.time())
diff.append(t1-t0)
while not response_rcvd:
pass
response_time.append(time.time())
解决方案
看看这个场景,我看不到完全独立于主进程的行之有效的方法,但让我们看看替代方案。
1. 使用时间装饰器:这涉及到使用类似的东西
@timer
def my_func()
pass
# enter code here
@timer
记录函数时序的装饰器在哪里。可以在此处找到全面的教程
2. 多处理:
我建议您研究的第一个替代方法是在此处使用multiprocessing
模块文档;这包括将主函数放在一个进程中,将计时记录器函数放在另一个进程中,然后使用它的一些共享状态方法,例如multiprocessing.Event
将计时事件从主进程发送到计时器进程。毕竟,我怀疑这是否完全解决了您的问题,诸如此类的方法event.set()
也会像time.time()
您逃避的那样花费一些时间。
3. 计时 time.time():
如果您的主要目标是计时的准确性,则第二种选择将涉及您计时time.time()
从程序中实际花费的时间,并在进行最终计算时将其考虑在内。
推荐阅读
- batch-file - Windows 批处理文件中的引号语法
- c++ - 在 C++ 语言中,标识符可以包含 unicode 字符吗?
- laravel-8 - Laravel-8 集合中的相关数据丢失
- regex - 如何在每场比赛前添加一个字符串?
- java - 无法在 MongoDB 中更改 chunkSize
- asp.net-core - IdentityServer4 从客户端应用程序注册
- flutter - FlatButton.icon 的 onPressed 没有被调用?
- sql - 触发器和游标
- python - ModuleNotFoundError:Mac 上没有名为“pyaudio”的模块(安装了 Anaconda)
- react-native - 刷新反应导航屏幕的内部功能