#python-3.x #async-await #parallel-processing #opencv-python
Вопрос:
Есть ли способ вызвать функцию, у которой есть ожидание(time.sleep()) из бесконечного цикла while, не нарушая цикл? Я пытаюсь выполнить несколько задач, для выполнения которых требуется подождать несколько секунд, но проблема в том, что цикл while также останавливается, когда происходит процесс ожидания. Это то, что я опробовал — Вот мой код:
import cv2
import time
def waiting():
print("Inside function")
# Running Some Tasks
time.sleep(5)
print("Done sleeping")
def main():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow("Webcam", frame)
k = cv2.waitKey(10)
if k == 32: # Press SPACEBAR for wait function
waiting()
elif k == 27: # Press ESC to stop code
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
Ответ №1:
В данный момент вы работаете в одном потоковом сценарии. Вы должны использовать потоковую или многопроцессорную обработку. Это делает (похоже) несколько процессов (активными). Зависит от того, используете ли вы многопоточность или многопроцессорность.
Комментарии:
1. Спасибо за предложение, я его проверю. Ценю ваше время.
2. @git-ruthvik Дай мне знать, как все идет. удачи!
Ответ №2:
Вы должны использовать потоки. Это будет выглядеть так, как будто компьютер выполняет их оба одновременно.
import threading
t = threading.Thread(target=function)
t.start()
Комментарии:
1. Спасибо за ваш вклад, это сработало!
2. Извините @cris новичок на этой платформе
Ответ №3:
Спасибо за быстрые ответы от @JLT и @TerePiim. Вот обновленный код для всех, кто может извлечь из этого выгоду:
import cv2
import time
import threading
def waiting():
print("Inside parallel function")
# Running some Tasks
time.sleep(5)
print("Done sleeping")
def main():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow("Webcam", frame)
k = cv2.waitKey(10)
if k == 32: # Press SPACEBAR for wait function
t = threading.Thread(target=waiting)
t.start()
elif k == 27: # Press ESC to stop code
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()