Google App引擎是否支持多线程?我在网上看到了相互矛盾的报道。
基本上,我正在开发一个与Apple推送通知服务器(APNS)通信的模块。它使用工作线程,该线程不断查找需要推送到拉取队列中的客户端设备的新消息。
收到消息并将其发送给APNS后,我希望它启动另一个线程,检查APNS是否发送任何错误响应作为回报。基本上,在同一个套接字上查找传入的字节(它只能是每个APNS规范的错误响应)。如果自主线程中的最后一条消息发送时间以来60秒内没有任何内容,则错误响应线程终止。
虽然这个“错误响应处理程序”线程正在等待来自APNS的字节(使用套接字上的select),但我希望主线程继续查看pull队列并发送立即发送的任何数据包。
我尝试启动后台线程来执行错误响应处理程序的功能。但由于线程是串行执行的,因此无法正常工作。即,只有在错误响应线程完成60秒等待后,控制才返回主线程。因此,如果有消息在此期间到达,则他们会排在队列中。
我在.yaml
中尝试过threadsafe:false我的问题是:
有没有办法在GAE中实现真正的多线程。即,主线程和错误响应线程在上面的示例中并行执行,而不是强制一个等待而其他执行?
如果不是,我试图解决的问题是否有解决办法?我尝试启动一个新实例来处理错误响应(基本上使用推送队列),但我不知道如何传递套接字对象,错误响应线程必须作为此推送队列任务的参数来监听(因为不支持dill序列化套接字对象)
答案 0 :(得分:0)
发现了这个问题。我正在调用start_background_thread,其参数设置为 function()。当我修复它以将其称为 function 时,它按预期工作。