python - 在 Python 中实现多处理进程的超时

标签 python python-3.x timeout python-multiprocessing

我愿意:

import multiprocessing as mp
q = mp.Queue()
p = mp.Process(target=lambda x: x, args=('foo',))
p.start()
p.join(10)
if p.exitcode == 0:
   q.get()
else:
   print("We timed out.")

我期望我的小 x->x 函数最多会阻塞 10 秒。如果在那之前完成,我会比那更早得到结果。如果花费的时间比这更长(显然不是在这个玩具示例中,而是在其他情况下),那么该过程将在 10 秒后终止,我可以检查 exitcode 以确定我们确实超时了。

但是当我执行这段代码时,发生的事情是 q.get() 永远运行。为什么会出现这种情况?

最佳答案

q.get() 永远运行,因为它默认会阻塞,并且您永远不会将任何内容放入队列中。

您可以使用q.get(block=False)q.get_nowait()(与前者等效)。但请记住,它会引发 queue.Empty,因此您应该处理该问题。

关于python - 在 Python 中实现多处理进程的超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44232464/

相关文章:

timeout - XMPPFramework:发送超时消息

python - 获取Python中嵌套字典的值

python - 进程数不确定的多重处理

python - 找出最大公约数

python - xlwings打开错误: not opening excel workbook getting an error upon call wb.

Python 3 - 计算两个列表中的匹配项(包括重复项)

python - 如何使用 Tkinter 和函数找到哪个复选按钮被选中?

python - Matplotlib 设置子图的面颜色

javascript - window.location.reload(true) 之后,IE11 中不会发生 URL 重定向

networking - TCP Socket 无连接超时