【问题标题】:python 3 datetime difference in microseconds giving wrong answer for a long operationpython 3 datetime 差异以微秒为单位给出长时间操作的错误答案
【发布时间】:2023-02-17 23:07:41
【问题描述】:

我正在从大小为 6000 的二叉搜索树(因此排序为单边树)中执行 3000 个元素的删除操作。我需要计算完成所有删除所花费的时间

我做了这个

    bst2 = foo.BinarySearchTree() #init
    insert_all_to_tree(bst2,insert_lines) #insert 6000 elements
    start = datetime.now() #start time
    for idx, line in enumerate(lines):
      bst2.delete(line)  #deleting
      if (idx%10 == 0):
        print("deleted ", (idx+1), "th element - ", line)
    end = datetime.now()  #completion time
    duration = end - start 
    print(duration.microseconds) #duration in microseconds

我得到了答案761716微秒,当我的实际代码运行大约时甚至不到一分钟5个小时.我期待的范围内的东西10^9 - 10^10.我什至检查了 python 中允许的最大整数,看看它是否与此相关,但显然这不是问题所在。

为什么我在这段时间内得到错误的答案?

【问题讨论】:

  • microseconds 字段永远不能超过一百万,因为那是一秒中的所有微秒。它不是全部的时间,只是不到一秒的那部分时间。
  • @jasonharper哦!我以为我得到了微秒的差异。我的错
  • @jasonharper 你介意把它作为答案吗?这是我出错的地方。现在我知道如何进行了

标签: python python-3.x datetime binary-search-tree python-datetime


【解决方案1】:

datetime.now() 返回 datetime,所以用它做数学运算是行不通的。您想要使用 time.time()(Python < v3.3)、time.perf_counter()(Python v3.3 至 v3.7)或 time.perf_counter_ns()(Python > v3.7)。

time.time()time.perf_counter()都返回floattime.perf_counter_ns()返回int

【讨论】:

  • 但是在做了差异end - start之后,我得到了一个带有microseconds字段的对象。抱歉,我来自 JavaScript 领域,所以不要介意我使用的关键字
  • 是的。它有一个microseconds字段和seconds。你需要看看他们两个。 63.192秒将被记录为seconds=63microseconds=192000
猜你喜欢
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多