Google应用引擎上的多线程

时间:2015-10-17 07:18:49

标签: multithreading python-2.7 sockets google-app-engine apple-push-notifications

Google App引擎是否支持多线程?我在网上看到了相互矛盾的报道。

基本上,我正在开发一个与Apple推送通知服务器(APNS)通信的模块。它使用工作线程,该线程不断查找需要推送到拉取队列中的客户端设备的新消息。

收到消息并将其发送给APNS后,我希望它启动另一个线程,检查APNS是否发送任何错误响应作为回报。基本上,在同一个套接字上查找传入的字节(它只能是每个APNS规范的错误响应)。如果自主线程中的最后一条消息发送时间以来60秒内没有任何内容,则错误响应线程终止。

虽然这个“错误响应处理程序”线程正在等待来自APNS的字节(使用套接字上的select),但我希望主线程继续查看pull队列并发送立即发送的任何数据包。

我尝试启动后台线程来执行错误响应处理程序的功能。但由于线程是串行执行的,因此无法正常工作。即,只有在错误响应线程完成60秒等待后,控制才返回主线程。因此,如果有消息在此期间到达,则他们会排在队列中。

我在.yaml

中尝试过threadsafe:false

我的问题是:

  1. 有没有办法在GAE中实现真正的多线程。即,主线程和错误响应线程在上面的示例中并行执行,而不是强制一个等待而其他执行?

  2. 如果不是,我试图解决的问题是否有解决办法?我尝试启动一个新实例来处理错误响应(基本上使用推送队列),但我不知道如何传递套接字对象,错误响应线程必须作为此推送队列任务的参数来监听(因为不支持dill序列化套接字对象)

1 个答案:

答案 0 :(得分:0)

发现了这个问题。我正在调用start_background_thread,其参数设置为 function()。当我修复它以将其称为 function 时,它按预期工作。