Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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线程挂起和don';关不上_Python_Multithreading - Fatal编程技术网

Python线程挂起和don';关不上

Python线程挂起和don';关不上,python,multithreading,Python,Multithreading,这是我第一次尝试Python中的线程, 作为一个非常简单的例子,我编写了以下程序。它只是得到一个列表,并使用一些线程打印它。但是,每当出现错误时,程序就会挂起在Ubuntu中,我似乎无法做任何事情来恢复控制提示符,因此必须重新启动另一个SSH会话才能重新启动。 我也不知道我的程序有什么问题。 是否有某种类型的错误处理,我可以放入,以确保它不会挂起。 还有,知道为什么ctrl/c不起作用吗(我没有断键) 你的q被挂起,因为你的工人出错了。所以你的q.task_done()从未被调用过 import

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


你的q被挂起,因为你的工人出错了。所以你的q.task_done()从未被调用过

import threading
使用

print threading.current_thread().name

在线程方法中,建议使用“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(第一列)

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