파이썬 타이머 함수는 reloader = True 일 때 bottle.py로 두 번 실행됩니다.

user3091850

파이썬 타이머에 문제가있는 동안 저는 bottle.py가 "reloader = True"로 실행될 때 모든 타이머 함수가 빠르게 연속적으로 두 번 실행된다는 것을 발견했습니다.

타이머를 호출하는 몇 가지 다른 방법으로 이것을 시도했으며 결과는 모든 인스턴스에서 동일합니다 (이중 실행).

샘플 코드 :

 #!/usr/bin/env python

 from threading import Timer
 from bottle import *

# Short timer
def short_time():
        t = Timer(1, short_time)
        t.daemon = True
        t.start()
        print "Short Time..."

# Long timer
def long_time():
        t = Timer(5, long_time)
        t.daemon = True
        t.start()
        print "Long Time..."

# The App
app = Bottle()

@app.route('/status')
def default():
        return "OK"

#Run the app -----
if __name__ == '__main__':

    # Start the short timer.  
    short_time()

    # Start the long timer.  
    long_time()

    # Run the app
    # This interferes with the timers
    run(app, host='0.0.0.0', port=8002, reloader=True) 

    #This one works as expected
    #run(app, host='0.0.0.0', port=8002) #This works fine

리 로더가 활성화 된 출력 :

Short Time...
Short Time...
Short Time...
Short Time...
Short Time...
Short Time...
Short Time...
Short Time...
Long Time...
Short Time...
Long Time...
Short Time...
Short Time...
Short Time...

예상 출력 (리 로더 없음) :

Short Time...
Short Time...
Short Time...
Short Time...
Long Time...
Short Time...
Short Time...
Short Time...
Short Time...
Short Time...
Long Time...
Short Time...
Short Time...

reloader를 사용하는 방법에 대한 아이디어가 있지만 타이머 문제를 방지합니까?

Martijn Pieters

reloader=True설정, 병 공정 자식 프로세스로 스크립트를 재 - 실행 :

if reloader and not os.environ.get('BOTTLE_CHILD'):
    import subprocess
    lockfile = None
    try:
        fd, lockfile = tempfile.mkstemp(prefix='bottle.', suffix='.lock')
        os.close(fd)  # We only need this file to exist. We never write to it
        while os.path.exists(lockfile):
            args = [sys.executable] + sys.argv
            environ = os.environ.copy()
            environ['BOTTLE_CHILD'] = 'true'
            environ['BOTTLE_LOCKFILE'] = lockfile
            p = subprocess.Popen(args, env=environ)

그런 다음 1 초 마다 자식이 다시 시작 됩니다 interval(기본값 1).

스크립트의 최상위 레벨에서 실행되는 모든 것은 bottle 서버를 시작할 때와 자식 프로세스가 다시 시작될 때마다 실행됩니다.

따라서 부모 프로세스 자식 프로세스 모두 독립적으로 타이머를 실행합니다. 5 초까지되기 전에 해당 프로세스로 실행 결코 극복 자식 프로세스의 긴 타이머가 사망하지만, 짧은 타이머가 있습니다 단지 부모 프로세스가 다시 시작하는 아이를 죽이기 전에 화재로 관리 할 수 있습니다.

BOTTLE_CHILD환경 변수를 테스트하여 하위 프로세스에 있는지 감지 할 수 있습니다 .

import os
if os.environ.get('BOTTLE_CHILD'):
    # in the child process, do something special perhaps?
    # this will be executed *each time the child is restarted*
else:
    # in the parent process, which restarts the child process

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

csv 행 파이썬에 함수를 적용 할 때 Pandas가 두 번 반복됩니다.

분류에서Dev

Bottle : HEAD는 항상 GET으로 돌아가므로 함수가 항상 두 번 실행됩니까?

분류에서Dev

오이가 처음입니다. 두 개의 기능 파일을 실행하고 있습니다. 실행하는 동안 오류가 표시됩니다. 첫 번째 태그 만 실행하면 정상적으로 실행됩니다.

분류에서Dev

keyup이 때때로 두 번 실행 됨

분류에서Dev

키워드가 파이썬으로 두 줄과 일치 할 때 두 번째 줄을 어떻게 나눌 수 있습니까?

분류에서Dev

JQuery fadeIn ()이 두 번 실행됩니다.

분류에서Dev

다른 함수가 실행 중일 때 콜백이 실행됩니까?

분류에서Dev

for 루프는 한 번만 실행됩니다 (파이썬).

분류에서Dev

PHP 함수는 두 번 이상 실행할 수 없습니다.

분류에서Dev

루프는 처음 호출 될 때 한 번만 실행되고 두 번째로 무한 실행됩니다.

분류에서Dev

왜 manage.py 실행 스크립트는 if __name__ == "__main__"에서 사용할 때 두 번 실행됩니다.

분류에서Dev

Pandas는 데이터베이스가 두 번째 위치 인수 일 때 함수를 적용합니다.

분류에서Dev

자주 트리거되는 CRON Azure 웹 작업이 구성된 빈도보다 오래 실행될 때 두 번째로 트리거됩니까?

분류에서Dev

첫 번째 타이머를 위해 Java 파일을 실행 파일로 변환

분류에서Dev

HSQL 데이터베이스는 때때로 schema.sql을 두 번 실행합니다.

분류에서Dev

C ++ 함수는 두 번 이상 실행되지 않습니다.

분류에서Dev

두 번 클릭하여 배치 파일을 실행할 수 없지만 cmd 창 또는 WinKEY + R에 입력하면 정상적으로 실행됩니다.

분류에서Dev

For 루프는 두 번 실행되지만 첫 번째 파일에 대해서만 실행됩니다.

분류에서Dev

For 루프는 두 번 실행되지만 첫 번째 파일에 대해서만 실행됩니다.

분류에서Dev

앱의 상태를 업데이트하기 위해 입력 필드와 함께 연결된 onChange 이벤트 핸들러 함수는 첫 번째로드시 한 번 실행되고 이후 단어 두 번 실행됩니다.

분류에서Dev

파일을 다운로드 할 때 두 번 요청하는 이유는 무엇입니까?

분류에서Dev

"Sudden Death"기능이 실제로 어떤 작업을 수행하기 전에 두 번 이상 반복됩니다.

분류에서Dev

메이크 파일 레시피는 대상이 종속성보다 더 최근일 때도 매번 실행됩니다.

분류에서Dev

onMapReady는 처음 실행할 때 두 번 호출됩니다.

분류에서Dev

이 타이머가 한 번에 두 번 실행되는 이유는 무엇입니까?

분류에서Dev

이 타이머가 한 번에 두 번 실행되는 이유는 무엇입니까?

분류에서Dev

휴대 전화가 수면 중일 때 타이머 실행

분류에서Dev

javascript 파일이 console.log 및 alert을 두 번로드하고 jquery "click"이 두 번 실행되는 이유

분류에서Dev

동일한 함수의 두 번째 호출이 왜 영원히 실행됩니까?

Related 관련 기사

  1. 1

    csv 행 파이썬에 함수를 적용 할 때 Pandas가 두 번 반복됩니다.

  2. 2

    Bottle : HEAD는 항상 GET으로 돌아가므로 함수가 항상 두 번 실행됩니까?

  3. 3

    오이가 처음입니다. 두 개의 기능 파일을 실행하고 있습니다. 실행하는 동안 오류가 표시됩니다. 첫 번째 태그 만 실행하면 정상적으로 실행됩니다.

  4. 4

    keyup이 때때로 두 번 실행 됨

  5. 5

    키워드가 파이썬으로 두 줄과 일치 할 때 두 번째 줄을 어떻게 나눌 수 있습니까?

  6. 6

    JQuery fadeIn ()이 두 번 실행됩니다.

  7. 7

    다른 함수가 실행 중일 때 콜백이 실행됩니까?

  8. 8

    for 루프는 한 번만 실행됩니다 (파이썬).

  9. 9

    PHP 함수는 두 번 이상 실행할 수 없습니다.

  10. 10

    루프는 처음 호출 될 때 한 번만 실행되고 두 번째로 무한 실행됩니다.

  11. 11

    왜 manage.py 실행 스크립트는 if __name__ == "__main__"에서 사용할 때 두 번 실행됩니다.

  12. 12

    Pandas는 데이터베이스가 두 번째 위치 인수 일 때 함수를 적용합니다.

  13. 13

    자주 트리거되는 CRON Azure 웹 작업이 구성된 빈도보다 오래 실행될 때 두 번째로 트리거됩니까?

  14. 14

    첫 번째 타이머를 위해 Java 파일을 실행 파일로 변환

  15. 15

    HSQL 데이터베이스는 때때로 schema.sql을 두 번 실행합니다.

  16. 16

    C ++ 함수는 두 번 이상 실행되지 않습니다.

  17. 17

    두 번 클릭하여 배치 파일을 실행할 수 없지만 cmd 창 또는 WinKEY + R에 입력하면 정상적으로 실행됩니다.

  18. 18

    For 루프는 두 번 실행되지만 첫 번째 파일에 대해서만 실행됩니다.

  19. 19

    For 루프는 두 번 실행되지만 첫 번째 파일에 대해서만 실행됩니다.

  20. 20

    앱의 상태를 업데이트하기 위해 입력 필드와 함께 연결된 onChange 이벤트 핸들러 함수는 첫 번째로드시 한 번 실행되고 이후 단어 두 번 실행됩니다.

  21. 21

    파일을 다운로드 할 때 두 번 요청하는 이유는 무엇입니까?

  22. 22

    "Sudden Death"기능이 실제로 어떤 작업을 수행하기 전에 두 번 이상 반복됩니다.

  23. 23

    메이크 파일 레시피는 대상이 종속성보다 더 최근일 때도 매번 실행됩니다.

  24. 24

    onMapReady는 처음 실행할 때 두 번 호출됩니다.

  25. 25

    이 타이머가 한 번에 두 번 실행되는 이유는 무엇입니까?

  26. 26

    이 타이머가 한 번에 두 번 실행되는 이유는 무엇입니까?

  27. 27

    휴대 전화가 수면 중일 때 타이머 실행

  28. 28

    javascript 파일이 console.log 및 alert을 두 번로드하고 jquery "click"이 두 번 실행되는 이유

  29. 29

    동일한 함수의 두 번째 호출이 왜 영원히 실행됩니까?

뜨겁다태그

보관