A simple loop execution time measurement tool.
Project description
LoopTick
一个简单的 Python 循环耗时测量工具。
安装
pip install looptick
本地安装
git clone https://github.com/DBinK/LoopTick
pip install -e .
使用示例
测量每个循环用时
常规方式
from looptick import LoopTick
import time
looptick = LoopTick()
# 常规调用方式
for i in range(5):
diff = looptick.tick()
print(f"第 {i} 次循环耗时: {diff * looptick.NS2MS:.6f} ms")
time.sleep(0.01)
print(f"总耗时: {looptick.total_sec:.6f} 秒")
print(f"平均耗时: {looptick.average_ms:.6f} ms")
# 或者用更精简的语法
for i in range(5):
diff = looptick() # 直接调用 __call__() 方法, 免去书写 tick()
print(f"第 {i} 次循环耗时: {diff * looptick.NS2MS:.6f} ms")
time.sleep(0.01)
使用上下文方式
from looptick import LoopTick
import time
with LoopTick() as looptick:
with LoopTick() as looptick:
for i in range(5):
diff = looptick.tick()
print(f"第 {i} 次循环耗时: {diff * looptick.NS2MS:.6f} ms")
diff = looptick.tick()
print(f"第 {i} 次循环耗时: {diff * looptick.NS2MS:.6f} ms")
time.sleep(0.01)
输出结果示例:
(LoopTick) PS C:\IT\LoopTick> & C:\IT\LoopTick\.venv\Scripts\python.exe c:/IT/LoopTick/examples/with_usage.py
第 0 次循环耗时: 0.000000 ms
第 1 次循环耗时: 10.829900 ms
第 2 次循环耗时: 16.055800 ms
第 3 次循环耗时: 14.013400 ms
第 4 次循环耗时: 15.587100 ms
总耗时: 0.056486 秒
平均耗时: 14.121550 ms
测量行间代码用时
from looptick import LoopTick
import time
def stage1():
time.sleep(0.02) # 模拟 I/O 操作
def stage2():
time.sleep(0.05) # 模拟复杂计算
def stage3():
time.sleep(0.01) # 模拟轻量处理
# 使用多阶段测量
linetick = LoopTick()
for i in range(3): # 模拟 1000 次循环
start = linetick.tick() # 第一次调用, 返回一个极小值 (0.000_001)
# 完成一次循环后, 返回上一次循环的 mid2 -> start 的用时
# 一般我们不关心 start 变量的值, 仅表示测量开始
stage1()
stage2()
mid1 = linetick.tick() # 返回 start —> mid1 的用时
stage3()
mid2 = linetick.tick() # 返回 mid1 —> mid2 的用时
print(f"\n第 {i} 次循环")
print(f"stage1() + stage2() 耗时: {mid1 * linetick.NS2MS:.2f} ms")
print(f"stage3() 耗时: {mid2 * linetick.NS2MS:.2f} ms")
print(f"本循环总耗时: {(mid1 + mid2) * linetick.NS2MS:.2f} ms")
print(f"\n循环任务总耗时: {linetick.total_sec:.6f} 秒")
输出结果示例:
(LoopTick) PS C:\IT\LoopTick> & C:\IT\LoopTick\.venv\Scripts\python.exe c:/IT/LoopTick/examples/lines_usage.py
第 0 次循环
stage1() + stage2() 耗时: 93.78 ms
stage3() 耗时: 15.10 ms
本循环总耗时: 108.88 ms
第 1 次循环
stage1() + stage2() 耗时: 89.86 ms
stage3() 耗时: 15.11 ms
本循环总耗时: 104.97 ms
第 2 次循环
stage1() + stage2() 耗时: 89.71 ms
stage3() 耗时: 15.01 ms
本循环总耗时: 104.72 ms
循环任务总耗时: 0.319596 秒
进阶用法: 多 Tick 测量
from looptick import LoopTick
import time
def stage1():
time.sleep(0.02) # 模拟 I/O 操作
def stage2():
time.sleep(0.05) # 模拟复杂计算
def stage3():
time.sleep(0.03) # 模拟轻量处理
# 使用多阶段测量 + 单独循环测量
linetick = LoopTick()
looptick = LoopTick()
for i in range(3): # 模拟 1000 次循环
loop_ns = looptick.tick() # 单独使用一个对象测量循环时间
start = linetick.tick() # 第一次调用, 返回一个极小值 (0.000_001)
# 完成一次循环后, 返回上一次循环的 mid2 -> start 的用时
# 一般我们不关心 start 变量的值, 仅表示测量开始
stage1()
stage2()
mid1 = linetick.tick() # 返回 start —> mid1 的用时
stage3()
mid2 = linetick.tick() # 返回 mid1 —> mid2 的用时
print(f"\n第 {i} 次循环")
print(f"stage1() + stage2() 耗时: {mid1 * linetick.NS2MS:.2f} ms")
print(f"stage3() 耗时: {mid2 * linetick.NS2MS:.2f} ms")
print(f"linetick 对象测量的循环耗时: {(mid1 + mid2) * linetick.NS2MS:.2f} ms")
print(f"looptick 对象测量的循环耗时: {loop_ns * linetick.NS2MS:.2f} ms")
print(f"\nlinetick 对象测量的循环任务总耗时: {linetick.total_sec:.6f} 秒")
print(f"looptick 对象测量的循环任务总耗时: {looptick.total_sec:.6f} 秒")
print(f"looptick 测量的每次循环平均耗时: {looptick.average_ms:.6f} ms")
# 注意: looptick 对象会少一次循环的计时, 因为在第一次调用时只能返回一个极小值 (0.000_001)
输出结果示例:
(LoopTick) PS C:\IT\LoopTick> & C:\IT\LoopTick\.venv\Scripts\python.exe c:/IT/LoopTick/examples/multi_tick_usage.py
第 0 次循环
stage1() + stage2() 耗时: 94.48 ms
stage3() 耗时: 45.04 ms
linetick 对象测量的循环耗时: 139.52 ms
looptick 对象测量的循环耗时: 0.00 ms
第 1 次循环
stage1() + stage2() 耗时: 89.68 ms
stage3() 耗时: 44.96 ms
linetick 对象测量的循环耗时: 134.65 ms
looptick 对象测量的循环耗时: 140.12 ms
第 2 次循环
stage1() + stage2() 耗时: 89.43 ms
stage3() 耗时: 44.88 ms
linetick 对象测量的循环耗时: 134.31 ms
looptick 对象测量的循环耗时: 135.23 ms
linetick 对象测量的循环任务总耗时: 0.409659 秒
looptick 对象测量的循环任务总耗时: 0.275349 秒
looptick 测量的每次循环平均耗时: 137.674650 ms
已知问题
- [] 在第一次调用时只能返回一个极小值 (0.000_001)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file looptick-0.1.4.tar.gz.
File metadata
- Download URL: looptick-0.1.4.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7bc35efd17b9e7200a67c92d30597cdf14e4d11c97c52a33aa632dbd5b6c3470
|
|
| MD5 |
f6745293617d7a5d728ff0b3c5e12600
|
|
| BLAKE2b-256 |
86157e2e0703fb7d2a6c8714f0952c0489ebd06f8a13b020e1e175613bbda653
|
Provenance
The following attestation bundles were made for looptick-0.1.4.tar.gz:
Publisher:
python-publish.yml on DBinK/LoopTick
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
looptick-0.1.4.tar.gz -
Subject digest:
7bc35efd17b9e7200a67c92d30597cdf14e4d11c97c52a33aa632dbd5b6c3470 - Sigstore transparency entry: 675387067
- Sigstore integration time:
-
Permalink:
DBinK/LoopTick@6f80ad74c19013cb758b228013fd69a1a7723616 -
Branch / Tag:
- Owner: https://github.com/DBinK
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@6f80ad74c19013cb758b228013fd69a1a7723616 -
Trigger Event:
release
-
Statement type:
File details
Details for the file looptick-0.1.4-py3-none-any.whl.
File metadata
- Download URL: looptick-0.1.4-py3-none-any.whl
- Upload date:
- Size: 4.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
54717b0ff56aa523780f5db562803795b5b3253c59c0ec4e7cb9c058e70fe4e1
|
|
| MD5 |
185ee1f9aa92f55d01713ba0f4daf862
|
|
| BLAKE2b-256 |
ef4aaf768dfe8a9ba02a95268b4e383ef93bc61e32b9c476e646cdf97d704252
|
Provenance
The following attestation bundles were made for looptick-0.1.4-py3-none-any.whl:
Publisher:
python-publish.yml on DBinK/LoopTick
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
looptick-0.1.4-py3-none-any.whl -
Subject digest:
54717b0ff56aa523780f5db562803795b5b3253c59c0ec4e7cb9c058e70fe4e1 - Sigstore transparency entry: 675387071
- Sigstore integration time:
-
Permalink:
DBinK/LoopTick@6f80ad74c19013cb758b228013fd69a1a7723616 -
Branch / Tag:
- Owner: https://github.com/DBinK
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@6f80ad74c19013cb758b228013fd69a1a7723616 -
Trigger Event:
release
-
Statement type: