我有一个使用工作队列和线程的端口扫描应用程序。
它使用简单的TCP连接,并花费大量时间等待数据包返回(最多半秒)。因此,线程不需要完全执行(即前半部分发送数据包,上下文切换,执行操作,返回到具有等待网络数据的线程)。
我怀疑我可以通过修改默认值100的sys.setcheckinterval
来提高性能(在切换到另一个线程之前,最多可以执行100个字节码)。
但是不知道在一个线程或函数中实际执行了多少字节码我是盲目的,只是猜测值,测试和依赖测试显示出可测量的差异(这很难,因为执行的代码量很小;简单的套接字连接,因此网络抖动可能会影响任何测量,而不是更改sys.setcheckinterval。)
因此,我想知道在某些代码执行中有多少字节码(即函数或执行一个线程的总数),所以我可以更聪明地猜测将sys.setcheckinterval设置为。
答案 0 :(得分:3)
对于更高级别(方法,类),dis module应该有帮助。
但如果需要更精细的粮食,tracing将是不可避免的。跟踪确实逐行操作,但explained here是深入了解字节码级别的一个很好的黑客。向Ned Batchelder致敬。
答案 1 :(得分:2)
关于这种复杂系统的推理很少会产生正确的答案。测量结果,并使用运行速度最快的设置。如果如你所说,测试不能测量setcheckinterval的各种设置的差异,那么为什么还要改变呢?只有可衡量的差异很有意思。如果您的测试运行时间太短而无法提供有意义的数据,那么请将运行时间设置为更长时间。
答案 2 :(得分:1)