我正在使用django 1.3,我正在使用主管在Web上下文之外运行脚本。
该过程的内存使用量每分钟都在增长
代码看起来或多或少像这样:
while(1):
for auction in auction_list:
auction.update_auction()
db.reset_queries()
db.close_connection()
sleep(1)
添加close_connection通过避免LOCKS在桌面上帮助我,但现在我有这个不断增长的过程问题。
我怎样才能避免这种情况?
答案 0 :(得分:3)
我找到了解决方案。 close_connection()负责增长的内存。它似乎来自数据库的连接/断开连接。
我继续这样做:
while(1):
# Get auction list
auction_list = Auction.objects.all()
# Checking auctions
for auction in auction_list:
auction.update_auction()
# Remove connection statements
db.reset_queries()
# Release lock tables
db.transaction.commit_unless_managed()
# Pause
sleep(1)
使用commit_unless_managed()守护进程保持连接打开,并且在没有完全锁定MyISAM表的情况下不会在内存中增长。
答案 1 :(得分:1)
嗯...因为您的代码包含在while(1)
块中?当然,它正在逐渐失去控制。您创建了一个无限循环,不断查询和更新数据库,直到永恒结束。
答案 2 :(得分:1)
让过程完全运行,然后让它死掉。操作系统将回收部分或全部python进程的资源。
或者,您可以考虑使用像此为此构建的芹菜。