gpt4 book ai didi

java - 最大限度。并行后台线程数(后端)

转载 作者:搜寻专家 更新时间:2023-11-01 01:35:57 27 4
gpt4 key购买 nike

我可以在一个谷歌应用引擎后端启动多少个并行后台线程?我没有找到有关并行允许线程数量的任何信息。我正在为 GAE 使用 Java。

我按照文档中的说明开始一个新线程:[1]

return ThreadManager.createBackgroundThread(new Runnable() { ... });

如果我运行我的应用程序,一段时间后会抛出以下异常(在创建新线程时):

com.google.appengine.api.system.SystemFailureException: An unknown error occurred

这个[2] issue提到如果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 区分normal threads ,不能超过启动它们的 HTTP 请求,并且 background threads , 这可以。

对于 Python,至少,生产(Python 2.7)运行时和 dev_appserver 都强加了一个每个后端 10 个后台线程的固定限制,独立于其他设置,例如max_concurrent_requestsbackends.yaml .

我和其他几个 App Engine 团队的老成员谈过,虽然他们没有100% 肯定,他们说这听起来不错。我已经凭经验证实了测试后端配置和代码如下。我还尝试从一个单独的 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 请求打开,而且他们似乎也不会在截止日期前被切断。我目前这样做是为了解决后台线程限制问题。

我希望这被记录下来!会节省我很多时间。


后端.yaml

- name: test
instances: 1
start: threadtest.application

测试.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)

关于java - 最大限度。并行后台线程数(后端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13936544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com