Найти - Пользователи
Полная версия: Как ограничить время выполнения скрипта?
Начало » Python для новичков » Как ограничить время выполнения скрипта?
1
POLL
Добрый День!
Столкнулся с такой ситуацией.

Есть цикл
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)
zheromo
запускайте скрипт в отдельном потоке
Syao
Что то наподобии этого:
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)
Главное, не забывайте уничтожать процессы по истечении времени.
POLL
Syao
Главное, не забывайте уничтожать процессы по истечении времени.
Я правильно понимаю, что строчка e.terminate() - как раз и уничтожает процесс?
Syao
POLL
Syao
Главное, не забывайте уничтожать процессы по истечении времени.
Я правильно понимаю, что строчка e.terminate() - как раз и уничтожает процесс?
Да.
З.Ы. http://docs.python.org/library/multiprocessing.html#multiprocessing.Process.terminate
POLL
Syao
POLL
Syao
Главное, не забывайте уничтожать процессы по истечении времени.
Я правильно понимаю, что строчка e.terminate() - как раз и уничтожает процесс?
Да.
З.Ы. http://docs.python.org/library/multiprocessing.html#multiprocessing.Process.terminate
Спасибо за помощь!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB