我在使用这个库时遇到了同样的问题(我假设你实际上正在使用https://github.com/simonwhitaker/PyAPNs,这就是我正在使用的。至少还有一个其他的库那里有一个相似的名字,但我认为你不会使用它)。
AFAIK 当您使用简单的通知服务时,APNS 服务器可能会挂断您,原因包括:使用不正确的令牌、请求格式错误等。或者如果您的网络连接中断或您的连接可能会中断。PyAPNS 代码现在不能非常优雅地处理这样的挂断,即使它已关闭,它也会尝试重新使用套接字。我看到 SSL3_WRITE_PENDING 错误的经验是,我总是会在套接字上看到诸如“错误:[Errno 110] 连接超时”之类的错误,然后当 PyAPNS 尝试重新使用套接字时,我会收到 SSL3_WRITE_PENDING 错误。
如果您看到服务器挂断,并且想知道它为什么这样做,那么使用增强版的 APNS 会有所帮助,这样服务器就会写回有关您做错了什么的信息。
碰巧的是,目前有一个拉取请求(https://github.com/simonwhitaker/PyAPNs/pull/23/files),它既使 PyAPNS 使用增强的 APNS 又更优雅地处理断开连接。您会看到我对该拉取请求发表了评论,并创建了我自己的 PyAPNS 分支,它以最适合我的用例的方式处理断开连接。
因此,您可以使用拉取请求中的代码来找出 APNS 服务器挂断您的原因。和/或您可以使用它来简化故障恢复,因此如果抛出异常,您只需重试发送,而不必重新创建 APNS 对象。
希望拉取请求将很快合并到 master (可能包括我的更改)。