我有一个函数,在返回调用之后需要很长时间才能将控制权返回给父级。我已经计时了,它经常在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
的父语句中的下一个语句