gpt4 book ai didi

Python 线程挂起并且不关闭

转载 作者:行者123 更新时间:2023-11-28 17:40:08 25 4
gpt4 key购买 nike

这是我第一次尝试在 Python 中使用线程,我写了下面的程序作为一个非常简单的例子。它只是获取一个列表并使用一些线程打印它。但是,每当出现错误时,程序就会在 Ubuntu 中挂起,我似乎无法做任何事情来恢复控制提示,所以必须重新启动另一个 SSH session 才能重新进入。也不知道我的程序有什么问题。我可以放入某种错误处理以确保它不会挂起。另外,知道为什么 ctrl/c 不起作用(我没有中断键)

from Queue import Queue
from threading import Thread
import HAInstances
import logging

log = logging.getLogger()
logging.basicConfig()

class GetHAInstances:
def oraHAInstanceData(self):
log.info('Getting HA instance routing data')
# HAData = SolrGetHAInstances.TalkToOracle.main()
HAData = HAInstances.main()
log.info('Query fetched ' + str(len(HAData)) + ' HA Instances to query')
# for row in HAData:
# print row
return(HAData)

def do_stuff(q):
while True:
print q.get()
print threading.current_thread().name
q.task_done()


oraHAInstances = GetHAInstances()
mainHAData = oraHAInstances.oraHAInstanceData()

q = Queue(maxsize=0)
num_threads = 10

for i in range(num_threads):
worker = Thread(target=do_stuff, args=(q,))
worker.setDaemon(True)
worker.start()

for row in mainHAData:
#print str(row[0]) + ':' + str(row[1]) + ':' + str(row[2]) + ':' + str(row[3])i
q.put((row[0],row[1],row[2],row[3]))

q.join()

最佳答案

在你的线程方法中,推荐使用“try ... except ... finally”。这种结构保证即使在发生错误时也能将控制权返回给主线程。

def do_stuff(q):
while True:
try:
#do your works
except:
#log the error
finally:
q.task_done()

此外,如果您想终止程序,请找出主线程的 pid 并使用 kill #pid 终止它。在 Ubuntu 或 Mint 中,使用 ps -Ao pid,cmd,在输出中,您可以通过搜索您自己键入的运行 Python 的命令(第二列)来找出 pid(第一列)脚本。

关于Python 线程挂起并且不关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25604816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com