Python thread.join(时间)不会返回

时间:2017-04-23 12:04:15

标签: python multithreading

我有两个定义如下的函数:

创建线程的函数:

def join_group_thread(client, link):
    thread_queue = queue.Queue()
    thread_1 = threading.Thread(
        target=join_group,
        name="Join Group Thread",
        args=[client, link, thread_queue],
    )
    thread_1.start()
    thread_1.join(10)
    return thread_queue.get()

在线程中运行的函数:

def join_group(client, params, queue):
    try:
        response = client.invoke(ImportChatInviteRequest(params))
    except Exception as e:
        response = str(e).replace("'","")
    queue.put(response)

main()我这样打join_group_thread

result = join_group_thread(client, link)

由于我在thread_1.join(10)将时间设置为10秒,我希望result = join_group_thread(client, link)最多花费10秒钟,但有时会永远挂起。

有任何解释吗?

1 个答案:

答案 0 :(得分:1)

来自the docs

  

Queue.get(block = True,timeout = None)

     

从队列中删除并返回一个项目。如果可选的args块为true且timeout为None(默认值),则在必要时阻塞,直到a   项目可用。

换句话说,thread.join中的超时是没有意义的,因为队列等待结果可用。使用thread_queue.get(block=False)thread_queue.get_nowait()