如何在不阻塞的情况下将值从线程传输到主程序?

How to transfer value from a thread to the main program without blocking it?

如果你看到我的先例问题,你就会看到我在 client/server 系统上工作。我正在开发一款多人游戏。为了从我那里接收消息,我使用了一个线程来不阻塞视频端工作的主程序(ursina)。

问题是我需要在主程序的线程上接收我接收到的玩家的新位置以更新它。我看到诸如队列或管道之类的东西,但它们总是阻塞程序(更新功能)。那么,如何在不阻塞线程的情况下将值从线程传输到主程序?

谢谢你的时间。

您可以轮询队列以查看它是否有新值。或者您可以在无论如何都会睡觉的地方使用超时参数,例如如果您 运行 具有固定的帧速率,您可能会一直睡到渲染下一个帧的时间。零超时也像轮询一样工作。

inputs = queue.Queue()
try:
    key = inputs.get(block=False)
except Queue.Empty:
    pass
else:
    process(key)