代码之家  ›  专栏  ›  技术社区  ›  Kurt

如何计算Python中的字节码,以便适当修改sys.setcheckinterval

  •  1
  • Kurt  · 技术社区  · 17 年前

    我有一个端口扫描应用程序,它使用工作队列和线程。

    它使用简单的TCP连接,并花费大量时间等待数据包返回(最多半秒)。因此,线程不需要完全执行(即,前半部分发送一个数据包,上下文切换,做一些事情,返回到有网络数据等待它的线程)。

    我怀疑我可以通过修改 sys.setcheckinterval

    但是,在不知道一个线程或函数中实际执行了多少字节码的情况下,我盲目地猜测值,测试和依赖测试显示出了可测量的差异(这很困难,因为执行的代码量很小;一个简单的套接字连接,因此网络抖动可能会比更改sys.setcheckinterval更影响任何测量)。

    因此,我想知道在某些代码执行中有多少字节码(即,函数或线程执行中的字节码总数),这样我就可以更智能地猜测将sys.setcheckinterval设置为什么。

    3 回复  |  直到 11 年前
        1
  •  3
  •   utku_karatas    17 年前

    对于更高级别(方法、类)而言, dis module 应该有帮助。

    但如果需要更细的颗粒, tracing explained here

        2
  •  2
  •   Ned Batchelder    17 年前

    对如此复杂的系统进行推理很少能得出正确的答案。测量结果,并使用运行最快的设置。如果正如您所说,测试无法测量setcheckinterval的各种设置之间的差异,那么为什么还要修改它呢?只有可衡量的差异才有趣。如果您的测试运行太短,无法提供有意义的数据,那么请延长运行时间,直到它提供有意义的数据为止。

        3
  •  1
  •   S.Lott    17 年前

    “我怀疑通过修改sys.setcheckinterval可以提高性能”

    这很少奏效。正确的行为不能依赖于时间——你不能控制时间。操作系统、硬件、Python补丁级别或phase of the moon上的细微变化将改变应用程序的行为。

    这个 select queues 为其他线程增加工作。其他线程正在等待其请求队列中的条目进行处理。