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

プロセスを完全に実行させてから、終了させます。オペレーティング システムは、python プロセスのリソースの一部またはすべてを再利用します。

または、このために構築されたセロリのようなものを使用することを検討できます。

于 2012-02-13T16:18:03.383 に答える
1

うーん...コードがwhile(1)ブロックにラップされているからですか?もちろん、それは制御不能に成長しています。永遠の終わりまで継続的にデータベースのクエリと更新を行う無限ループを作成しました。

于 2012-02-13T16:14:59.000 に答える