Найти - Пользователи
Полная версия: Бесконечный цикл совсем не бесконечный
Начало » Python для новичков » Бесконечный цикл совсем не бесконечный
1 2
alex2016
Пытаюсь сделать демон, но не хрена не получается. Цикл который должен быть бесконечным делает около 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
Вот на этом запускал скрипт:
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
В первом сообщение почему-то к первой строке кода добавился лишний отступ, просьба не обращать внимание
ZerG
попробуйте убрать из цикла sys.exit()
alex2016
ZerG
попробуйте убрать из цикла sys.exit()
А в цикле нет не каких sys.exit()
     while 1: 
        f.write('%s\n' % time.ctime(time.time())) 
        f.flush() 
        #time.sleep(5)
alex2016
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() 
JOHN_16
alex2016
почитайте, может быть интересным Запуск Python программы открепленной от консоли
alex2016
JOHN_16
alex2016почитайте, может быть интересным Запуск Python программы открепленной от консоли
А можно пожалуйста мне подцказать чем отличается мой “dooble fork magic” от преведённого в ссылке? Я плохо играю в игру найди 10 отличий.
alex2016
FishHook
https://lmgtfy.com/?q=How+to+run+programs+from+a+linux+terminal+without+blocking+the+terminal%3F
Я умею гуглить, спасибо за помощь. Очень помогли)))
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