Процесс роста с использованием Python / Django и супервизора - PullRequest
0 голосов
/ 13 февраля 2012

Я использую django 1.3, и я запускаю сценарий вне веб-контекста, используя supervisor.

Использование памяти процессом растет каждую минуту

Код выглядит более или менеевот так:

while(1):
   for auction in auction_list:
       auction.update_auction()

    db.reset_queries()
    db.close_connection()
    sleep(1)

Добавление close_connection помогло мне, избежав ЗАМКАНИЙ на столе, но теперь у меня возникла эта проблема растущего процесса.

Как мне управлять вещами, чтобы избежать этого?

Ответы [ 3 ]

3 голосов
/ 14 февраля 2012

Я нашел решение. 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 голос
/ 13 февраля 2012

Пусть процесс запустится полностью, затем пусть он умрет.Операционная система восстановит некоторые или все ресурсы процесса python.

Или вы можете использовать что-то вроде сельдерея, созданного для этого.

1 голос
/ 13 февраля 2012

Умм ... потому что у вас есть код, обернутый в блок while(1)?Конечно, это выходит из-под контроля.Вы создали бесконечный цикл, который непрерывно запрашивает и обновляет базу данных до конца вечности.

...