У меня есть следующий код, который почти выполняет то, что мне нужно:
import threading
import sched, time
def printit():
threading.Timer(10.0, printit).start()
print("Hello, World!")
x=25
printit()
while x>1:
time.sleep(1)
print(x)
x=x-1
Он печатает «Hello, World!». каждые 5 секунд при одновременном обратном отсчете числа от 25 до 2. Проблема, с которой я столкнулся, заключается в том, что я хочу написать "Hello, World!" в пределах l oop, чтобы он остановился, когда обратный отсчет остановится. Когда я добавляю его к l oop, он говорит: «Привет, мир!» каждую секунду, а также каждые 5 секунд, и когда l oop заканчивается, он все еще продолжается. Я думаю, что использую неправильный модуль, но я не уверен.
Изменить: это код, к которому я пытаюсь применить его:
import threading
import sched, time
import numpy as np
import cv2
import imutils
flag = False
def printit():
while(flag):
print("Hello, world!")
time.sleep(30)
t = threading.Thread(target=printit)
t.start()
fullbody_cascade = cv2.CascadeClassifier('haarcascade_fullbody.xml') #creates variables for the different cascades
upperbody_cascade = cv2.CascadeClassifier('haarcascade_upperbody.xml')
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap0 = cv2.VideoCapture(0) #chooses camera to be utilized
while True:
ret0, frame0 = cap0.read() #reads the frames of the chosen camera
gray0 = cv2.cvtColor(frame0, cv2.COLOR_BGR2GRAY) #converts to grayscale
fullbody0 = fullbody_cascade.detectMultiScale(gray0) #detects the grayscaled frame
upperbody0 = upperbody_cascade.detectMultiScale(gray0)
face0 = face_cascade.detectMultiScale(gray0)
for (x,y,w,h) in fullbody0:
cv2.rectangle(frame0, (x,y), (x+w, y+h), (0,0,255), 2) #creates red a box around entire body
for (x,y,w,h) in upperbody0:
cv2.rectangle(frame0, (x,y), (x+w, y+h), (255,0,0), 2) #creates a blue box around upper body
for (x,y,w,h) in face0:
cv2.rectangle(frame0, (x,y), (x+w, y+h), (0,255,0), 2) #creates a green box around face
flag = True
time.sleep(0.5)
flag = False
cv2.imshow('cam0',frame0)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cv2.destroyAllWindows()
Я пытался реализовать это так, но работает не так, как задумано. Если условие одного из циклов for выполняется быстро, он быстро печатает «Hello, World!», Как я могу изменить это так, чтобы он всегда печатал только «Hello, World!». каждые x секунд независимо от того, сколько раз выполняются условия для l oop.
Редактировать 2: приведенный выше код теперь работает, поскольку я немного отредактировал его, проблема заключалась в том, что для l oop двигался слишком быстро, так что сообщение печати не отображалось, добавив time.sleep (0.5) после оператора flag = True, он смог распечатать сообщение. Спасибо Ориусу за помощь!