1

编辑:通过多线程,我的意思是我已经threadsafe: true在我的 app.yaml 中设置,而不是我试图创建自己的线程。

我一直在尝试在我的 GoogleAppEngine Python 应用程序中使用多线程。

一些背景:

我使用 Django 进行模板,使用自定义模板加载器。第一次将模板传递给 Django 中的模板加载器时,会给出模板的完整路径。但是,对于模板引用的其他模板文件(通过includeextend),只有文件名被传入,并且由加载器来查找文件的完整路径。为了做到这一点,第一个模板的完整路径存储在加载器上,然后它使用该路径来尝试查找传入的任何其他文件。

这在单线程环境中很好,但在多线程环境中,这意味着如果为一个请求渲染子模板由于数据存储请求或其他原因需要很长时间,另一个请求可以尝试使用加载器来查找文件并覆盖存储的路径。当第一个请求返回并尝试加载更多子模板时,加载器会查找错误的位置并引发 TemplateDoesNotExist 错误。

我提出的解决方案:

如果我有某种方法可以获取当前线程或当前请求,那么我可以创建线程/请求的映射以在加载程序中搜索路径。

threading.current_thread()应该返回当前线程(假设线程是用创建的threading

但是在 AppEngine 上,当我调用 threading.current_thread() 时,它会返回一个 DummyThread ,例如<_DummyThread(Dummy-1, started daemon 4424339456)>.

我不清楚我是否可以安全地使用这个 DummyThread 来识别当前线程,或者我是否需要找到其他方法来获取当前线程?

4

0 回答 0