Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Python: порядок выполнения функций  (Прочитано 2725 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн aliftin

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Python: порядок выполнения функций
« : 07 Ноября 2010, 23:15:00 »
Доброго времени суток. Не могу разобраться в каком порядке ставить выполнение функций. Есть код, в нем 2 класса: Pidof - идет слежение за работой программы, Menu - отрисовка элементов трея. По отдельности оно работает, а вот вместе нет:
#!/usr/bin/env python

import gtk
import os
import time

class Pidof:
def __init__(self):
while True:

if (os.popen("pidof opera").read() == ''):
exit()
else:
print "no"
time.sleep(5)


class Menu:

        def __init__(self):
#Тут идет много кода, думаю нет смысла его кидать

if __name__ == "__main__":

menu = Menu()
gtk.main()
pidof = Pidof()

Что должно быть в конце? Если строку "pidof = Pidof()" поднять вверх, то не запустится отрисовка меню. Как поступают в таких случаях?
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Python: порядок выполнения функций
« Ответ #1 : 08 Ноября 2010, 10:16:39 »
Ваш экземпляр Pidoff претендует на звание демона, т.е. он при инициализации зацикливается.
Если Вам это надо, то запустите его самого по себе или сделайте форк с pidoffом.

Оффлайн aliftin

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Python: порядок выполнения функций
« Ответ #2 : 08 Ноября 2010, 10:21:46 »
Не особо еще разобрался в языке, напишите подробней как это сделать.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Python: порядок выполнения функций
« Ответ #3 : 08 Ноября 2010, 11:00:50 »
Сделайте 2 файла питоновских и пускайте так.
python 1.py & python 2.py
или так, тоже пойдет
1.py & 2.py
А если хочется использовать форки, то надо изучать библиотеки python.
« Последнее редактирование: 08 Ноября 2010, 11:03:25 от alexander.pronin »

Оффлайн aliftin

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Python: порядок выполнения функций
« Ответ #4 : 08 Ноября 2010, 14:51:05 »
Именно к такой мысли я сегодня пришел на парах, только я думал запускать второй скрипт из первого примерно так:
os.system ('opera & sleep 1')
os.system ('python script.2py  & sleep 1')

При завершения работы первого скрипта второй так же завершится, так как искомый процесс исчезнет. Вопрос только в том на сколько правильна такая реализация.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Python: порядок выполнения функций
« Ответ #5 : 08 Ноября 2010, 15:36:43 »
В питоне есть средство для организации многопоточных программ. thread называется сей инструмент.
Тогда можно будет из главной программы запустить еще одну квазипараллельную задачу. И тогда делить программу на 2 файла не надо.

Оффлайн aliftin

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Python: порядок выполнения функций
« Ответ #6 : 10 Ноября 2010, 22:52:36 »
Все, разобрался с многопоточностью. Были небольшие проблемы со спецификой ее роботы с pyGTK, но все решил.
#!/usr/bin/env python

import gtk
import os
import time
import threading



class Pidof(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)

def run(self):
while True:

if (os.popen("pidof opera").read() == ''):
gtk.main_quit()
else:
print "no"
time.sleep(5)

class Menu(threading.Thread):

        def __init__(self):
threading.Thread.__init__(self)
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

 

Страница сгенерирована за 0.286 секунд. Запросов: 26.