我有一个程序,使用Python的Schedule包启动该程序后,该程序会在特定时间点拍摄网络摄像头图像。我的问题是,当我在另一个类中调用该类时,它将阻塞主线程。我试图在另一个构建Tkinter UI的程序中调用“ webcamPic”。但是,调用webcamPic时不会构建UI。我目前正在使用“ schedule_run_pending()”运行时间表。我知道我应该使用run_continously(),但由于它不是标准Schedule库的一部分,所以我不知道如何调用该库或为此导入什么库。我当前的代码如下。除主要功能外,大多数都应该无关紧要。有人可以告诉我如何在另一个类中调用webcamPic而不阻塞主线程。
import threading
import time
from time import sleep
import cv2
from datetime import datetime
import random
import os
from WindowsInhibitor import *
from captureImage import *
import schedule
from preventSleep import *
class webcamPic:
def __init__(self, name):
# preventSleep()
self.name = name
self.time1, self.time2, self.images = [], [], []
print("time1:", self.time1)
print("time2:", self.time2)
self.startHour = int(datetime.now().strftime('%H'))
self.startMin = int(datetime.now().strftime('%M'))
self.string = ""
self.main()
def job(self):
self.string = self.string.replace(":", "")
self.string = date.today().strftime("-%Y-%m-%d-") + datetime.now().strftime('%H-') + datetime.now().strftime(
'%M')
captureImage(self.name, self.string, self.images)
print(self.string)
print("images array:", self.images)
return schedule.CancelJob
def hourlyCheck(self):
random.seed(datetime.now())
self.time1.clear()
self.time2.clear()
self.time1.extend(random.sample(range(2, 31), k=2))
self.time1.sort()
self.time2.extend(random.sample(range(31, 61), k=2))
self.time2.sort()
print("time1:", self.time1)
print("time2:", self.time2)
def everyHour(self):
print("every")
self.hourlyCheck()
for i in self.time1:
formattedTime = ":" + ("{:02d}".format(i))
self.string = datetime.now().strftime('%H') + formattedTime
schedule.every().hour.at(formattedTime).do(self.job)
for i in self.time2:
formattedTime = ":" + ("{:02d}".format(i))
self.string = datetime.now().strftime('%H') + formattedTime
schedule.every().hour.at(formattedTime).do(self.job)
print("everyhour")
# after first hour of pictures
def afterFirstHour(self):
print("after first hour")
schedule.every().hour.at(":01").do(self.everyHour)
# first hour of pictures
def firstHour(self):
print("first hour")
self.time1.clear()
self.time2.clear()
if self.startMin < 30:
if self.startMin < 27:
self.time1.extend(random.sample(range(self.startMin + 1, 31), k=2))
self.time1.sort()
print("time1:", self.time1)
for i in self.time1:
formattedTime = ":" + ("{:02d}".format(i))
self.string = datetime.now().strftime('%H') + formattedTime
schedule.every().hour.at(formattedTime).do(self.job)
self.time2.extend(random.sample(range(31, 61), k=2))
self.time2.sort()
print("time2:", self.time2)
for i in self.time2:
formattedTime = ":" + ("{:02d}".format(i))
self.string = datetime.now().strftime('%H') + formattedTime
schedule.every().hour.at(formattedTime).do(self.job)
else:
if self.startMin <= 56:
self.time2.extend(random.sample(range(self.startMin + 1, 61), k=2))
self.time2.sort()
print(self.time2, "time2")
for i in self.time2:
formattedTime = ":" + ("{:02d}".format(i))
self.string = datetime.now().strftime('%H') + formattedTime
schedule.every().hour.at(formattedTime).do(self.job)
def main(self):
schedule.every(10).minutes.do(preventSleep)
# first hour
self.firstHour()
# after first hour
formattedTime = ("{:02d}".format(self.startHour + 1)) + ":00"
schedule.every().day.at(formattedTime).do(self.afterFirstHour)
while True:
schedule.run_pending()
sleep(1)
if __name__ == '__main__':
webcamPic("NAME")