使用Python / Django和supervisor增长过程

时间:2012-02-13 16:10:59

标签: python django memory process supervisord

我正在使用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在桌面上帮助我,但现在我有这个不断增长的过程问题。

我怎样才能避免这种情况?

3 个答案:

答案 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进程的资源。

或者,您可以考虑使用像此为此构建的芹菜。