编辑,我的意思是我在我的app.yaml中设置了threadsafe: true
,而不是我正在尝试创建自己的线程。
我一直在尝试在我的GoogleAppEngine Python应用程序中使用多线程。
某些背景:
我使用Django进行模板化,使用自定义模板加载器。第一次将模板传递给Django中的模板加载器时,会给出模板的完整路径。但是,对于模板引用的其他模板文件(通过include
和extend
),只传入文件名,并由加载器来查找文件的完整路径。为此,第一个模板的完整路径存储在加载器上,然后使用该路径尝试查找传入的任何其他文件。
这在单线程环境中很好,但在多线程环境中,这意味着如果由于数据存储请求或其他原因而为一个请求渲染子模板需要很长时间,则另一个请求可以尝试使用加载器找到一个文件并覆盖存储的路径。当第一个请求返回并尝试加载更多子模板时,加载器会查找错误的位置并引发TemplateDoesNotExist错误。
我建议的解决方案:
如果我有办法获得当前线程或当前请求,那么我可以创建线程/请求的映射来搜索加载器中的路径。
threading.current_thread()
应该返回当前线程(假设该线程是使用threading
创建的)
但是在AppEngine上,当我调用threading.current_thread()时,它会返回像<_DummyThread(Dummy-1, started daemon 4424339456)>
这样的DummyThread。
我不清楚我是否可以安全地使用这个DummyThread来识别当前线程,或者我是否需要找到其他方法来获取当前线程?