函数需要很长时间才能返回

时间:2017-04-20 20:12:25

标签: python couchdb python-3.5

我有一个函数,在返回调用之后需要很长时间才能将控制权返回给父级。我已经计时了,它经常在2-10分钟之间运行。这是函数本身:

def mass_update_database(database, queue):

    documents_to_update = []

    # Get all docs from queue for updating.
    while not queue.empty():
        documents_to_update.append(queue.get())
        queue.task_done()

    # Update database
    database.update(documents_to_update)

    # Compact the database, which removes previous revisions
    # and slims the size of our database.
    if database.compact():
        print('Compaction completed successfully.')
    else:
        print('Compaction failed.')

    print('Beginning return')
    d = datetime.datetime.now()
    return d

关于上面代码的一些注意事项,队列非常大(8,500个字典,至少有20个键和可能很长的值)这是更新到CouchDB,因此数据库对象是couchdb.Database对象。 d变量用于计时(这就是我知道它花了这么长时间)。

我怀疑documents_to_update变量可能是如此之大以至于清理它需要很长时间?但是我在计时器启动之前添加了documents_to_update = []的变体运行它,它仍然需要很长时间才能返回。

这是被调用的地方。上面的函数位于一个名为NS的不同模块中。

d = NS.mass_update_database(ns_database, docs_to_update_queue)
print('Returned', datetime.datetime.now() - d)

任何人都知道为什么将控制权交还给父母可能需要2-10分钟?

我应该补充一点,当我从函数中获取代码并将其粘贴到函数调用的位置时,不需要永远完成运行return语句的位置。

编辑:我应该澄清一下,返回的时间很长,从我初始化d到控制返回到父级。完成并完成的所有代码ABOVE。需要很长时间的是从return语句到调用mass_update_database的父语句中的下一个语句

0 个答案:

没有答案