Python-这是线程/循环/等待代码错误吗-它';销钉';中央处理器
我有一个python应用程序,其中thread1调用api查看“准备下载哪些报告”,并将该报告id发送给thread2,thread2“下载/处理这些报告”。这些线程在字典上迭代,然后等待5分钟。即使代码“什么也不做”,它也依赖于CPU 我不确定CPU是挂在线程中还是挂在主线程中。总的来说,我有一些处理程序来检查停止信号,所以我发布了大部分代码。我有几个线程以类似的方式执行类似的任务,它们在循环结束时以类似的方式等待。我怀疑代码与主cpu(a)的固定相关的区域-运行时的Python-这是线程/循环/等待代码错误吗-它';销钉';中央处理器,python,multithreading,cpu,python-multithreading,Python,Multithreading,Cpu,Python Multithreading,我有一个python应用程序,其中thread1调用api查看“准备下载哪些报告”,并将该报告id发送给thread2,thread2“下载/处理这些报告”。这些线程在字典上迭代,然后等待5分钟。即使代码“什么也不做”,它也依赖于CPU 我不确定CPU是挂在线程中还是挂在主线程中。总的来说,我有一些处理程序来检查停止信号,所以我发布了大部分代码。我有几个线程以类似的方式执行类似的任务,它们在循环结束时以类似的方式等待。我怀疑代码与主cpu(a)的固定相关的区域-运行时的:pass。b) 在每个线
:pass
。b) 在每个线程中,is\u kill=self.\u kill.wait(600)
这是一个theaded.Event()
知道什么是固定cpu吗
if __name__ == '__main__':
t2 = ProcessReport()
t2.start()
t1 = RequestReport(t2)
t1.start()
t3 = report_test()
t3.start()
t4 = run_flask()
t4.start()
run = True
signal.signal(signal.SIGINT, handler_stop_signals)
signal.signal(signal.SIGTERM, handler_stop_signals)
signal.signal(signal.SIGHUP, handler_stop_signals)
while run:
pass # Stay here until kill
print("About to kill all threads in clean order")
t3.kill()
t3.join()
t1.kill()
t1.join()
t2.kill()
t2.join()
print("Clean Exit")
sys.exit()
信号处理器
def handler_stop_signals(signum, frame):
global run
run = False
一根线
class report_test(Thread):
def __init__(self):
Thread.__init__(self)
self._kill = threading.Event()
def kill(self):
self._kill.set()
def run(self):
while True:
cursor.execute("SELECT * FROM tbl_rpt_log where cron='1'")
reports_to_run = cursor.fetchall()
for row in reports_to_run:
report_on_row(row)
is_killed = self._kill.wait(600)
if is_killed:
print("Killing - ReportCheckTable")
break
问题(至少是主要问题)是:
运行时:
过这里,直到杀人
这是因为这里唯一的操作是评估循环的条件,CPU“无法捕捉到中断”
我没有通读整个代码,以便从较高的层次理解它,但解决它的最快方法是:
导入时间
# ...
运行时:
时间。睡眠(0.1)#待在这里直到死亡
就是这样。我假设,由于循环没有做功,这意味着没有cpu。。谢谢