나는 Google 전체를 살펴 보았고 이것이 작동하지 않는 것 같습니다. 나는 둘 다 무한 루프 인 2 개의 함수를 스레드하려고합니다.
아래의 추출을 보면 첫 번째 스레드 만 시작하고 다음 스레드로 진행하지 않습니다.
추신 : 두 개의 스레드를 교체하면 두 번째 스레드에서 동일한 문제가 발생합니다.
def syslog_service():
syslog_server = socketserver.UDPServer((syslog_host,syslog_port), Syslog_Server)
syslog_server.serve_forever()
def cleanup_old_logs_service():
# lock = threading.Lock()
# threading.Thread.__init__(self)
global syslog_retention_hours
global RUNNING
while RUNNING:
# cleanup_old_logs_service.lock.acquire()
cleanup.old_logs(syslog_retention_hours)
# cleanup_old_logs_service.lock.release()
time.sleep(10)
if __name__ == "__main__":
try:
logger.info("Starting main thread")
config()
logger.info("Starting system testing")
test()
logger.info("Config loaded")
thread1 = cleanup_old_logs_service()
thread2 = syslog_service()
thread1.start()
logger.info("Syslog cleanup service running")
thread2.start()
logger.info("Syslog server running")
첫 번째 스레드 만 실행되는 이유는 실제로 프로그램에 스레드가 하나만 있기 때문입니다. 당신은 쓸 때 thread1 = cleanup_old_logs_service()
와 thread2 = syslog_service()
는 새로운 스레드를 생성하지만, 단지 2 개 개의 다른 변수에 함수의 반환 값을 할당하지 않습니다. 이러한 이유로 프로그램이를 만나는 즉시 thread1
실행 cleanup_old_logs_service()
되고 무한 루프에 갇히게됩니다.
새 스레드를 만들려면 threading
모듈을 가져 와서 새 threadObj
개체를 만들고 다음과 같이 스레드를 시작합니다.
import threading
threadObj = threading.Thread(target=cleanup_old_logs_service)
threadObj.start()
이렇게하면 함수 cleanup_old_logs_service()
가 새 스레드에서 실행됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다