Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image GAE webapp2_附加会话内存限制(在会话中存储临时映像)_Image_Google App Engine_Session_Webapp2 - Fatal编程技术网

Image GAE webapp2_附加会话内存限制(在会话中存储临时映像)

Image GAE webapp2_附加会话内存限制(在会话中存储临时映像),image,google-app-engine,session,webapp2,Image,Google App Engine,Session,Webapp2,webapp2_extras的会话非常有用,我一直在使用它们来保持用户登录等等。但是关于它的文档并不多。例如:会话字典中某个条目的内存限制是多少 到目前为止,我已经存储了字符串和数字。但是我需要存储一个从HTML表单上传的完整图像(想法是这个图像是临时的,可能会被丢弃,所以我不想将它存储在数据存储中,直到我确定我必须这样做)。它似乎不起作用,我想我遇到了一个记忆问题: self.session['photo_image'] = self.request.get("photo_image")

webapp2_extras的会话非常有用,我一直在使用它们来保持用户登录等等。但是关于它的文档并不多。例如:会话字典中某个条目的内存限制是多少

到目前为止,我已经存储了字符串和数字。但是我需要存储一个从HTML表单上传的完整图像(想法是这个图像是临时的,可能会被丢弃,所以我不想将它存储在数据存储中,直到我确定我必须这样做)。它似乎不起作用,我想我遇到了一个记忆问题:

self.session['photo_image']  = self.request.get("photo_image")

是这样吗?我想有内存限制,但我找不到。我还可以如何在GAE中存储临时图像?

您可以将其存储在“实例内存”中,例如,在脚本启动时创建一个全局列表,并将传入图像附加到该列表中,然后在完成后将其删除。当然,如果你有很多用户/大文件,你很快就会在那里运行内存。当实例关闭时,您将失去所有功能,如果有多个实例正在运行,您将(可能)遇到问题

所以Memcache听起来非常适合这个。


是的,它不是100%可靠,我相信你已经听说了,但如果你不使用100的文件是巨大的,并保持他们周围的年龄,你可能不会有问题。因为它是先进先出(IIRC),如果您或多或少地按顺序处理它们,那么丢失数据的可能性甚至更小。我认为memcache将是您最好的选择,试试吧

Cookie大小至少为:每个Cookie 4096字节,尽管规范中没有限制。我当前的解决方案是在用户模型中添加一个“临时图像”字段:它包含每个用户当前上载的图像。但它需要写入和读取数据存储,这是我试图避免的。所以我先试试你的解决方案。谢谢啊,等等:“序列化键和值的组合大小必须最多为1兆字节。”所以不,memcache不是一个选项,我担心:(这是每项的,不是全部,别忘了!你可以按这里描述的方式将其拆分为几部分:所以它真的没那么糟糕。对,对,我知道它是每项的。但这些是相当大的图像(至少超过1Mb,我担心)。没错,我可以将它们分成更小的部分,但这样做时,事情似乎更不可靠……我认为我应该坚持使用数据存储X(TBH您应该先试用一下,看看它到底有多不可靠。我使用memcache一天完成了140万个事务,没有问题。如果您将它用作数据存储的替代品,它可能不可靠,但如果您按预期使用,那么您应该是a-ok!但随您所愿!
 def get_data():
    data = memcache.get('key')

    if data is not None:
        return data
    else:
        data = self.query_for_data()
        memcache.add('key', data, 60)
        return data