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

问题描述 投票:2回答:1

我有一个函数,在执行返回调用后,需要很长时间才能将控制权返回给父级。我已经定时了,它通常运行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,因此数据库对象是一个ouchdb.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直到控件返回到父级的时间。以上所有已完成的代码。从返回语句到父级中的下一个称为mass_update_database

的语句所花费的时间很长

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

python couchdb python-3.5
1个回答
0
投票

存在相同的问题。函数已经完成,但是要返回就需要永远。

© www.soinside.com 2019 - 2024. All rights reserved.