我有两个定义如下的函数:
创建线程的函数:
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秒钟,但有时会永远挂起。
有任何解释吗?
答案 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()
。