【问题标题】:Limit the number of actions per second in python?限制python中每秒的动作数?
【发布时间】:2016-02-16 23:45:27
【问题描述】:

如何限制 Python 中的程序每秒执行的操作数。我知道你可以在每一行代码之间加上 time.sleep(n),但是有没有更简单的方法?

【问题讨论】:

  • 你是如何定义“动作”的?
  • 为什么要故意降低速度?
  • 强调@jwodder 所说的,什么是动作?您可以调用一些函数f(),它本身运行 1000 行代码。该函数调用 1 个动作吗?
  • @jwodder 我将一个动作定义为执行的每一行代码。
  • (戴上心灵感应帽)可能 OP 想要进行调试,并限制代码以清楚地读取其在控制台中写入的任何输出。

标签: python python-3.x


【解决方案1】:

听起来这将是您学习如何使用调试器的好时机。它将允许您在代码中的某些点设置断点,并在这些点查看对您很重要的各种值。

它们还可以让您快速运行代码行,以查看它们如何与程序的当前状态交互。查看 Python 的调试器,pdb

【讨论】:

    【解决方案2】:

    我突然写了这个:

    def slowdown(source,target,n,indent = 4):
        f = open(source)
        lines = f.read().split('\n')
        f.close()
        f = open(target,'w')
        f.write('from time import sleep\n')
        for line in lines:
            f.write(line + '\n')
            if len(line.strip()) > 0:
                level = len(line) - len(line.lstrip())
                if line.strip().endswith(':'):
                    level += indent
                f.write(' '*level + 'sleep(' + str(n) + ')\n')
        f.close()
    

    然后我评估了

    slowdown('dice.py','slowdice.py',0.5)    
    

    dice.py 的样子:

    #dice.py
    
    import random
    
    def roll(n):
        return random.randint(1,n)
    
    grand_total = 0
    for i in range(100):
        die = roll(6)
        count = 1 # I've already rolled once
        rolls = str(die)
    
        while die != 6:
            die = roll(6)
            rolls += str(die)
            count +=1
    
        print(rolls)
        grand_total += count
    
    average = grand_total / 100
    print('-'*20)
    print("An average of %0.1f rolls required" % average)
    

    它会创建以下文件(名为 slowdice.py):

    from time import sleep
    #dice.py
    sleep(0.5)
    
    import random
    sleep(0.5)
    
    def roll(n):
        sleep(0.5)
        return random.randint(1,n)
        sleep(0.5)
    
    grand_total = 0
    sleep(0.5)
    for i in range(100):
        sleep(0.5)
        die = roll(6)
        sleep(0.5)
        count = 1 # I've already rolled once
        sleep(0.5)
        rolls = str(die)
        sleep(0.5)
    
        while die != 6:
            sleep(0.5)
            die = roll(6)
            sleep(0.5)
            rolls += str(die)
            sleep(0.5)
            count +=1
            sleep(0.5)
    
        print(rolls)
        sleep(0.5)
        grand_total += count
        sleep(0.5)
    
    average = grand_total / 100
    sleep(0.5)
    print('-'*20)
    sleep(0.5)
    print("An average of %0.1f rolls required" % average)
    sleep(0.5)
    

    生成的程序运行起来非常缓慢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多