Python 如果我在一个线程中侦听websocket,而在另一个线程中运行函数,是否有可能错过消息

Python 如果我在一个线程中侦听websocket,而在另一个线程中运行函数,是否有可能错过消息,python,multithreading,websocket,python-multithreading,gil,Python,Multithreading,Websocket,Python Multithreading,Gil,标题真的说明了一切。我正在Linux EC2实例上运行一个有4个线程的程序。其中三个是监听不同的WebSocket,最后一个是webscraping,并在需要时调用一组其他函数 如果GIL归第四个线程所有(即它当前正在通过单核运行计算),websocket消息是否可能被侦听的线程“错过” 我开始认为这是不可能的,但不明白为什么。我四处查看了一下,但没有什么用处。不太可能,即使您的应用程序被完全阻止,例如通过调度或简单地休眠,操作系统也会将传入的网络消息排队。如果TCP缓冲区开始溢出,您可能会丢失

标题真的说明了一切。我正在Linux EC2实例上运行一个有4个线程的程序。其中三个是监听不同的WebSocket,最后一个是webscraping,并在需要时调用一组其他函数

如果GIL归第四个线程所有(即它当前正在通过单核运行计算),websocket消息是否可能被侦听的线程“错过”


我开始认为这是不可能的,但不明白为什么。我四处查看了一下,但没有什么用处。

不太可能,即使您的应用程序被完全阻止,例如通过调度或简单地休眠,操作系统也会将传入的网络消息排队。如果TCP缓冲区开始溢出,您可能会丢失消息,我认为在您的情况下不太可能。您可以通过故意在第四个线程中睡眠一段时间来测试您的想法,并查看消息是否被丢弃。

我收集通话时间。sleep()将释放GIL,或者是否有其他调用来阻止GIL?是的,为了超级安全,您可以忙着等待并尝试计算斐波那契数。)