Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 10, 2016 07:36:33

alex2016
Зарегистрирован: 2016-12-10
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Бесконечный цикл совсем не бесконечный

Пытаюсь сделать демон, но не хрена не получается. Цикл который должен быть бесконечным делает около 400,000 интераций, а если поставить в конец цикла “time.sleep(5)” таки вообще одна интерация. Не могу понять в чём дело может кто то подцкажет, вот код:

 import sys, os, time
def main():
    f = open("daemon.log", "w") 
    # Вот с этим циклом беда
    while 1: 
        f.write('%s\n' % time.ctime(time.time())) 
        f.flush() 
        #time.sleep(5)
if __name__ == "__main__":
    # do the UNIX double-fork magic, see Stevens' "Advanced 
    # Programming in the UNIX Environment" for details (ISBN 0201563177)
    try: 
        pid = os.fork() 
        if pid > 0:
            # exit first parent
            sys.exit(0) 
    except OSError, e: 
        print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror) 
        sys.exit(1)
    # decouple from parent environment
    #os.chdir("/") 
    os.setsid() 
    os.umask(0) 
    # do second fork
    try: 
        pid = os.fork() 
        if pid > 0:
            # exit from second parent, print eventual PID before
            print "Daemon PID %d" % pid 
            sys.exit(0) 
    except OSError, e: 
        print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror) 
        sys.exit(1) 
    # start the daemon main loop
    main() 

Мне в голову пришло только что где-то стоит ограничение на время выполнения кода, циклов… Но после того когда я убрал двойной fork то цикл заработал.

Отредактировано alex2016 (Дек. 10, 2016 07:41:11)

Офлайн

#2 Дек. 10, 2016 07:39:20

alex2016
Зарегистрирован: 2016-12-10
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Бесконечный цикл совсем не бесконечный

Вот на этом запускал скрипт:

Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 4.7.10-0-beget-acl x86_64)

* Documentation: https://help.ubuntu.com/
New release '14.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Sat Dec 10 05:34:04 2016 from **.**.**.**
alex2016@quake2:~ [0] $ python --version
Python 2.7.3
alex2016@quake2:~ [0] $

Отредактировано alex2016 (Дек. 10, 2016 07:43:28)

Офлайн

#3 Дек. 10, 2016 07:42:13

alex2016
Зарегистрирован: 2016-12-10
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Бесконечный цикл совсем не бесконечный

В первом сообщение почему-то к первой строке кода добавился лишний отступ, просьба не обращать внимание

Офлайн

#4 Дек. 10, 2016 08:28:58

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Бесконечный цикл совсем не бесконечный

попробуйте убрать из цикла sys.exit()



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Дек. 10, 2016 08:32:14

alex2016
Зарегистрирован: 2016-12-10
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Бесконечный цикл совсем не бесконечный

ZerG
попробуйте убрать из цикла sys.exit()
А в цикле нет не каких sys.exit()
     while 1: 
        f.write('%s\n' % time.ctime(time.time())) 
        f.flush() 
        #time.sleep(5)

Офлайн

#6 Дек. 10, 2016 08:50:06

alex2016
Зарегистрирован: 2016-12-10
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Бесконечный цикл совсем не бесконечный

ZerG, убрал я все sys.exit() цикл заработал но появилась зависимость от терминала, а мне это не нужно.

 import sys, os, time
def main():
    f = open("daemon.log", "w") 
    while 1: 
        f.write('%s\n' % time.ctime(time.time())) 
        f.flush() 
        time.sleep(10)
if __name__ == "__main__":
    # Абсолютно бессмысленная операция без sys.exit()
    os.fork()
    os.fork()
    # start the daemon main loop
    main() 

Офлайн

#7 Дек. 10, 2016 09:35:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Бесконечный цикл совсем не бесконечный

Офлайн

#8 Дек. 10, 2016 10:10:08

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Бесконечный цикл совсем не бесконечный

alex2016
почитайте, может быть интересным Запуск Python программы открепленной от консоли



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Отредактировано JOHN_16 (Дек. 10, 2016 10:11:53)

Офлайн

#9 Дек. 10, 2016 10:29:28

alex2016
Зарегистрирован: 2016-12-10
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Бесконечный цикл совсем не бесконечный

JOHN_16
alex2016почитайте, может быть интересным Запуск Python программы открепленной от консоли
А можно пожалуйста мне подцказать чем отличается мой “dooble fork magic” от преведённого в ссылке? Я плохо играю в игру найди 10 отличий.

Отредактировано alex2016 (Дек. 10, 2016 10:29:56)

Офлайн

#10 Дек. 10, 2016 10:40:15

alex2016
Зарегистрирован: 2016-12-10
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Бесконечный цикл совсем не бесконечный

FishHook
https://lmgtfy.com/?q=How+to+run+programs+from+a+linux+terminal+without+blocking+the+terminal%3F
Я умею гуглить, спасибо за помощь. Очень помогли)))

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version