当前位置: 首页 > 面试题库 >

为什么此循环不每五秒钟显示一次更新的对象计数?

子车超英
2023-03-14
问题内容

我使用以下python代码每5秒输出事物数:

def my_count():     
    while True:
        print "Number of Things: %d" % Thing.objects.count()
        time.sleep(5)

my_count()

如果在my_count()运行时另一个进程生成了新的Thing,则my_count()将继续打印相同的数字,即使现在它已在数据库中更改了。(但是,如果我杀死my_count()并重新启动它,它将显示新的Thing计数。)

事物存储在MYSQL innodb数据库中,并且此代码在ubuntu上运行。

为什么my_count()不重新启动就不会显示新的Thing.objects.count()?


问题答案:

因为Python DB API默认情况下处于AUTOCOMMIT = OFF模式,并且(至少对于MySQLdb)处于REPEATABLE
READ隔离级别。这意味着在幕后,您正在进行一个正在进行的数据库事务(InnoDB是事务引擎),在该事务中,对给定行(或什至是表,我不确定)的首次访问将修复该资源“剩余部分”的“视图”交易。

为了防止这种行为,您必须“刷新”当前事务:

  from django.db import transaction


  @transaction.autocommit  
  def my_count():     
      while True:
          transaction.commit()
          print "Number of Things: %d" % Thing.objects.count()
          time.sleep(5)

-请注意transaction.autocommit装饰器仅用于进入事务管理模式(这也可以使用transaction.enter_transaction_management / leave_transaction_managemen函数手动完成)。

需要注意的另一件事-Django的自动提交与数据库中的自动提交不同,它是完全独立的。但这超出了这个问题的范围。

于22/01/2012修改

这是一个类似问题的“双答案”。



 类似资料:
  • 问题内容: 我在Django中的应用程序 可以 创建一些 非常大的SQL查询。我目前使用一个对象,作为我需要的数据,然后使用一个,以返回要显示给用户的内容。 显然,我可以让用户等待一分钟,同时正在执行这些许多查询集并从数据库中提取查询,然后返回此单一HTML页面。 理想情况下,我想在需要时更新页面,例如: 这可能吗? 问题答案: 我最近发现HttpResponse可以是生成器: 这将逐步将结果返回

  • 此方法重复读取命令并执行它们,直到游戏结束。完成的变量为true时,表示玩家/用户点击了退出并想要结束游戏——从而退出循环并执行到方法结束。 但我观察到循环有一种奇怪的行为。它循环得非常好(省略以下行时显示stopWatch.getTime()的连续计数: 但是当我把它们放回去时,它会停止显示秒表的连续递增时间,因为它会朝着时间限制增加(在这一点上,它应该停止)。即使玩家没有输入任何命令或输入。

  • 我正在努力练习techniqual测试,我必须计算DNA序列中的字符数,但无论我做什么,计数器都不会更新,这真的很令人沮丧,因为我用ruby学习代码,它会更新,但Java似乎有一个问题。我知道我的语法有问题,但是我怎么也想不出来。 如果满足条件并重新分配值,它只会一直返回零,而不是加一。

  • 我用基本的图形用户界面创建了一个小画板程序。我使用了画图组件方法。我想每毫秒更新正在绘制的图形。这样,用户可以在释放鼠标点击之前看到他们将要绘制的内容。例如,如果我正在绘制一个矩形,我想在绘制矩形时看到它。如果你不明白我到底在说什么,打开微软油漆,点击矩形工具。画一个矩形。注意它是如何持续更新的,而不是在释放鼠标后。我想一定有办法让它每毫秒更新我的图形。做这件事最好的方法是什么?抱歉,如果这是一个

  • 考虑这个简单的C++函数来计算数组的前缀和: 它是4个融合的UOP1,这个CPU可以支持4个融合的OPs/周期。 有通过和携带的依赖链,每个都是一个循环,但是这些UOP可以到4个ALU端口中的任何一个,所以似乎不太可能冲突。融合的需要转到p6,这是一个更令人担忧的问题,但我只测量到p6的1.1 UOPS/迭代。这将解释每次迭代1.1个循环,但不是1.4个循环。如果我将循环展开2倍,端口压力会低得多

  • 问题内容: 试图在我的GUI窗口上显示来自互联网的图片。 到目前为止,我的代码是: 问题是我得到的只是一个应该显示图片的蓝色框。我该如何解决? 在Windows上使用python 3.3 问题答案: 现在这是一个疯狂的猜测,但是我只记得一个类似的问题。我能够以这种方式重现您的“蓝框”,所以这也可能是您的问题。我将尝试一下。 我假设PhotoImage是在其他某个范围内创建的(可能是一种方法或类似的