Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 22, 2010 13:01:52

POLL
От:
Зарегистрирован: 2010-03-18
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ограничить время выполнения скрипта?

Добрый День!
Столкнулся с такой ситуацией.

Есть цикл

for row in cursor.fetchall():
os.system("python generate.py " + row[0])
time.sleep(1)
try:
cursor1.execute("""UPDATE links SET created = 1 WHERE domain = %s""", (row[0]) );
db1.commit()
except:
db1.rollback()
В строке os.system(“python generate.py ” + row)
запускается generate.py, который открывает оконное приложение (gtk, gtkmozembed) и выполняет различные действия.
Иногда этот скрипт отрабатывает слишком долго.
1) Как сделать так, чтобы скрипт при превышении допустим 30 секунд переходил на следующую итерацию?
2) Как можно в оконном приложении (в generate.py) отключить появление алертов? (предупреждающие сообщения с кнопкой OK)



Офлайн

#2 Окт. 22, 2010 15:27:44

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Как ограничить время выполнения скрипта?

запускайте скрипт в отдельном потоке



Офлайн

#3 Окт. 22, 2010 15:34:49

Syao
От:
Зарегистрирован: 2009-11-15
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ограничить время выполнения скрипта?

Что то наподобии этого:

import time
from multiprocessing import Process

class Example(Process):
def __init__(self, row, *argv, **kwargv):
super(Example, self).__init__(*argv, **kwargv)
self.row = row
self.resualt = None

def run(self):
import os
os.system("python generate.py ") + row[0])

try:
cursor1.execute("""UPDATE links SET created = 1 WHERE domain = %s""", (row[0]) );
db1.commit()
self.resualt=True
except Exception:
db1.rollback()
self.resualt = False

for row in cursor.fetchall():
e = Example(row)
e.start()
t0 = time.time()
while True:
if e.resualt or (time.time()-t0 > 30):
e.terminate()
break
time.sleep(1)
Главное, не забывайте уничтожать процессы по истечении времени.



Офлайн

#4 Окт. 22, 2010 16:01:00

POLL
От:
Зарегистрирован: 2010-03-18
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ограничить время выполнения скрипта?

Syao
Главное, не забывайте уничтожать процессы по истечении времени.
Я правильно понимаю, что строчка e.terminate() - как раз и уничтожает процесс?



Офлайн

#5 Окт. 22, 2010 16:14:50

Syao
От:
Зарегистрирован: 2009-11-15
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ограничить время выполнения скрипта?

POLL
Syao
Главное, не забывайте уничтожать процессы по истечении времени.
Я правильно понимаю, что строчка e.terminate() - как раз и уничтожает процесс?
Да.
З.Ы. http://docs.python.org/library/multiprocessing.html#multiprocessing.Process.terminate



Офлайн

#6 Окт. 22, 2010 16:44:27

POLL
От:
Зарегистрирован: 2010-03-18
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ограничить время выполнения скрипта?

Syao
POLL
Syao
Главное, не забывайте уничтожать процессы по истечении времени.
Я правильно понимаю, что строчка e.terminate() - как раз и уничтожает процесс?
Да.
З.Ы. http://docs.python.org/library/multiprocessing.html#multiprocessing.Process.terminate
Спасибо за помощь!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version