0

我正在使用 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 帮助了我,但现在我遇到了这个日益严重的过程问题。

我该如何管理事情以避免这种情况?

4

3 回答 3

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 表的情况下不会在内存中增长。

于 2012-02-14T07:41:42.850 回答
1

嗯...因为您将代码包装在一个while(1)块中?当然,它越来越失控。您已经创建了一个无限循环,该循环不断地查询和更新数据库,直到永恒结束。

于 2012-02-13T16:14:59.000 回答
1

让进程完全运行,然后让它死掉。操作系统将回收部分或全部 python 进程的资源。

或者,您可以考虑使用为此而构建的 celery 之类的东西。

于 2012-02-13T16:18:03.383 回答