我有一个使用工作队列和线程的端口扫描应用程序。
它使用简单的 TCP 连接并花费大量时间等待数据包返回(最多半秒)。因此线程不需要完全执行(即前半部分发送数据包、上下文切换、执行操作、返回到有网络数据等待它的线程)。
我怀疑我可以通过修改 sys.setcheckinterval 的默认值 100 来提高性能(在切换到另一个线程之前最多可以执行 100 个字节码)。
但是在不知道线程或函数中实际执行了多少字节码的情况下,我盲目地猜测值,测试和依赖测试显示出可测量的差异(这很困难,因为正在执行的代码量很少; 一个简单的套接字连接,因此网络抖动可能比更改 sys.setcheckinterval 更能影响任何测量。
因此我想找出在某些代码执行中有多少字节码(即一个函数或线程执行中的字节码总数)这样我就可以更明智地猜测将 sys.setcheckinterval 设置为什么。
请您参考如下方法:
对于更高级别(方法、类)而言,dis module应该有帮助。
但如果需要更细的颗粒,tracing将不可避免。跟踪确实逐行运行,但 explained here是在字节码级别深入研究的好方法。向 Ned Batchelder 致敬。
