Eic*_*ich 4 java google-app-engine
我可以在一个谷歌应用引擎后端启动多少个并行后台线程?我没有找到任何并行允许线程的信息.我正在使用Java作为GAE.
我按照文档中的解释开始了一个新的主题:[1]
return ThreadManager.createBackgroundThread(new Runnable() { ... });
Run Code Online (Sandbox Code Playgroud)
如果我运行我的应用程序,一段时间后抛出以下异常(在创建新线程时):
com.google.appengine.api.system.SystemFailureException: An unknown error occurred
Run Code Online (Sandbox Code Playgroud)
这个[2]问题提到如果API超出配额,则会出现此异常.所以我可以创建线程,但在一定时间后出现异常.这就是为什么我认为后端的线程有限.
[1] https://developers.google.com/appengine/docs/java/backends/overview#background_threads
[2] http://code.google.com/p/googleappengine/issues/detail?id=7398
对于记录,App Engine区分正常线程,后者不能比启动它们的HTTP请求更长,后台线程可以.
对于Python,至少,生产(Python 2.7)运行时和dev_appserver都会对每个后端施加10个后台线程的固定限制,与其他设置无关,例如max_concurrent_requests在
backends.yaml中.
我和其他一些老App Engine团队成员谈过,虽然他们不是百分百肯定,但他们说这听起来不错.我已经通过下面的测试后端配置和代码进行了经验证实.我还尝试从单独的HTTP请求和另一个后台线程启动更多后台线程.没运气; 总共10个总限制.
以下是SDK在dev_appserver(特别是SDK 1.8.8中的devappserver2)中为Python设置限制的地方:instance.py:449, python_runtime.py: 61.看起来Go和Java完全禁用后台线程:go_runtime.py : 99 , java_runtime.py : 61.
一个有趣的怪癖:在后台线程中,看起来你可以根据需要启动任意数量的普通线程,至少在你达到内存限制之前.他们没有打开任何HTTP请求,他们似乎也没有在截止日期前被截断.我目前正在这样做以解决后台线程限制.
我希望这是有记录的!本来可以节省我很多时间.
backends.yaml
- name: test
instances: 1
start: threadtest.application
Run Code Online (Sandbox Code Playgroud)
test.py
def test():
for i in range(100):
logging.info('Starting #%d', i)
background_thread.start_new_background_thread(time.sleep, [20])
class Start(webapp2.RequestHandler):
def get(self):
background_thread.start_new_background_thread(test, [])
application = webapp2.WSGIApplication([('/_ah/start', Start)], debug=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1888 次 |
| 最近记录: |