Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-这是线程/循环/等待代码错误吗-它';销钉';中央处理器_Python_Multithreading_Cpu_Python Multithreading - Fatal编程技术网

Python-这是线程/循环/等待代码错误吗-它';销钉';中央处理器

Python-这是线程/循环/等待代码错误吗-它';销钉';中央处理器,python,multithreading,cpu,python-multithreading,Python,Multithreading,Cpu,Python Multithreading,我有一个python应用程序,其中thread1调用api查看“准备下载哪些报告”,并将该报告id发送给thread2,thread2“下载/处理这些报告”。这些线程在字典上迭代,然后等待5分钟。即使代码“什么也不做”,它也依赖于CPU 我不确定CPU是挂在线程中还是挂在主线程中。总的来说,我有一些处理程序来检查停止信号,所以我发布了大部分代码。我有几个线程以类似的方式执行类似的任务,它们在循环结束时以类似的方式等待。我怀疑代码与主cpu(a)的固定相关的区域-运行时的:pass。b) 在每个线

我有一个python应用程序,其中thread1调用api查看“准备下载哪些报告”,并将该报告id发送给thread2,thread2“下载/处理这些报告”。这些线程在字典上迭代,然后等待5分钟。即使代码“什么也不做”,它也依赖于CPU

我不确定CPU是挂在线程中还是挂在主线程中。总的来说,我有一些处理程序来检查停止信号,所以我发布了大部分代码。我有几个线程以类似的方式执行类似的任务,它们在循环结束时以类似的方式等待。我怀疑代码与主cpu(a)的固定相关的区域-运行时的
: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。。谢谢