我有一个处理上传文件的Django视图,当它被重复调用时,我们总是会遇到内存错误.(我们在Heroku上,所以我们每个网络dyno获得512mb的内存).
过度内存错误表明每次调用都会增加文件大小的内存使用量,内存使用率也不会下降.我认为服务器将图像读入内存以将其保存到Django模型中,但是当它完成时永远不会释放内存.
我认为必须有一个对函数返回后持久存在的图像的引用,防止图像被垃圾收集.但我想不出那可能是什么.
这是代码的简化版本,我测试了它以确保它有同样的问题:
def simplified_add_image(request, biz_id):
if request.is_ajax():
# the file is stored raw in the request
newBI = NewBusinessImage(business_id=biz_id, name=request.GET.get("name"), primary_image=True)
newBI.id = uuid.uuid4()
newBI.save()
uniquename = biz_id + ".." + get_a_uuid() + ".jpg"
newBI.original_image.save(uniquename, ContentFile(request.read()))
# this starts a series of tasks to process the image into various sizes.
# don't think it's the problem because it runs on a separate server, and the
# web server is the one that goes over memory
tasks.image_meta_task.delay(uniquename, newBI.id)
return …Run Code Online (Sandbox Code Playgroud) 需要一种方法通过Facebook API在朋友的墙上发布评论(我正在使用Python包装器).
考虑两个用户,Alice和Bob.我有两个用户的read_stream和write_stream权限.
>>> alice_graph = GraphAPI(alice_access_token)
>>> bob_graph = GraphAPI(bob_access_token)
# Alice makes a post on her own wall, which returns the objects Graph API id
>>> alice_graph.put_wall_post("test_message", attachment={'name' : 'some_name', 'link' : 'some_link')
{u'id': u'some_facebook_id'}
# Alice can comment
>>> alice_graph.put_comment('some_facebook_id', "test comment")
{u'id': u'some_other_facebook_id'}
# But Bob cannot comment
>>> bob_graph.put_comment('some_facebook_id', "test_comment")
*** GraphAPIError: (#100) Error finding the requested story
Run Code Online (Sandbox Code Playgroud)
有趣的是,这只发生在Alice的墙贴有一个attachment. 如果爱丽丝制作一个没有附件的墙贴,只是一条消息,就不会发生这种情况.
关于如何在没有它们的附件和墙贴的墙贴之间,权限可能会有任何不同,我完全感到困惑.
谁知道我做错了什么?
在使用Celery和RabbitMQ时,无法让计划任务在指定的未来时间运行.
在Heroku服务器上使用Django,使用RabbitMQ插件.
问题:
有时候任务根本不会运行,有时它们会运行,但它们运行的时间会大幅度减少(例如一小时).
未运行的示例任务:
当我尝试使用倒计时或ETA运行任务时,它实际上从未执行过.这是一个未运行的示例ETA任务:
>>> dummy_task.apply_async(eta=datetime.datetime.now() + timedelta(seconds=60))
<AsyncResult: 03001c1c-329e-46a3-8180-b115688e1865>
Run Code Online (Sandbox Code Playgroud)
结果日志:
2012-07-24T14:03:08+00:00 app[scheduler.1]: [2012-07-24 10:03:08,909: INFO/MainProcess]
Got task from broker: events.tasks.dummy_task[910ff406-d51c-4c29-bdd1-fec1a8168c12]
eta:[2012-07-24 10:04:08.819528+00:00]
一分钟后没有任何反应.将unacknowledged message count在我的Heroku RabbitMQ的管理控制台增加一个和在那里停留.
这有效:
我确保芹菜任务已正确注册,RabbitMQ配置为通过验证我可以使用delay()方法运行任务来接受任务.
>>> dummy_task.delay()
<AsyncResult: 1285ff04-bccc-46d9-9801-8bc9746abd1c>
Run Code Online (Sandbox Code Playgroud)
结果日志:
2012-07-24T14:29:26+00:00 app[worker.1]: [2012-07-24 10:29:26,513: INFO/MainProcess]
Got task from broker: events.tasks.dummy_task[1285ff04-bccc-46d9-9801-8bc9746abd1c]
....
2012-07-24T14:29:26+00:00 app[worker.1]: [2012-07-24 10:29:26,571: INFO/MainProcess]
Task events.tasks.dummy_task[1285ff04-bccc-46d9-9801-8bc9746abd1c]
succeeded in 0.0261888504028s: None
任何有关这方面的帮助将不胜感激.非常感谢!
我们在Heroku上运行Django,我正在寻找一种方法来监控正在使用的内存量.一旦我们超越极限,我们会得到错误,告诉我们我们正在使用多少内存,但我想知道即使我们处于极限之下,内存也会如何消退和流动.
它看起来像是基本的功能,但我没有在Heroku dyno docs中看到任何建议的方法.我真的很感激任何指针.
非常感谢!
粘土
我想知道我是否可以将人类可读的主键用于相对较少数量的数据库对象,这将描述大都市区域.
例如,使用"washington_dc"作为华盛顿特区都市区的pk,或纽约市的"nyc".
吨对象将国外键入这些城域网对象,我希望能够告诉当一个人或企业只是通过看他们的数据库记录位置.
我只是担心,因为我的直觉告诉我这可能是违反良好做法的严重犯罪.
那么,我"允许"做这种事吗?
谢谢!
需要一种方法让Facebook在墙上的帖子中呈现图像.有时,您需要做的就是将链接复制并粘贴到图像,如下所示:
但是,对于我需要链接的图像,这些图像在S3上,我得到了这个:
您可以单击此处以验证第二个链接实际上是一个有效的图像地址(您应该看到一个令人毛骨悚然的手绘笑脸).
我只是使用网站上的普通Facebook GUI进行了这项测试,但我将在我的应用程序中使用这个问题的答案,该应用程序通过Open Graph API与Facebook集成.(如果有人认为这个问题与编程无关).
任何人都知道我需要做什么才能在帖子中渲染第二张图片?
我希望能够打开一个Python shell,执行模块中定义的一些代码,然后修改模块,然后在不关闭/重新打开的情况下在同一个shell中重新运行它.
我在修改脚本后尝试重新导入函数/对象,但这不起作用:
Python 2.7.2 (default, Jun 20 2012, 16:23:33)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from my_module import buggy_function, test_input
>>> buggy_function(test_input)
wrong_value # Returns incorrect result
# Go to the editor, make some changes to the code and save them
# Thought reimporting might get the new version
>>> from my_module import buggy_function, test_input
>>> buggy_function(test_input)
wrong_value # Returns the same incorrect result
Run Code Online (Sandbox Code Playgroud)
显然重新导入并没有让我获得该功能的"新版本".
在这种情况下,关闭解释器并重新打开它并不是什么大不了的事.但是,如果我正在测试的代码足够复杂,有时我必须做大量的导入对象并定义虚拟变量来创建一个可以充分测试代码的上下文.每次做出改变时都必须这样做很烦人. …
想知道在多层应用程序结构中设置默认值的最佳方法。具体来说,如果某个工作流程需要一组嵌套的函数调用,那么默认值是在所有函数上指定,还是仅在顶层函数上指定并向下传递?或者完全是其他模式?
例如,考虑一个具有 3 层的 Web 应用程序:
假设客户端想要获取一个对象——对于这个例子,假设它是一个Place对象。地点对象有type——城市、州、城镇、县等。
资源函数可能如下所示(使用 Django HTTP 对象):
def resource_get_place(request, type=None):
""" Gets a place of the specified type, or a place of any type if
type is None """
place = business_get_place(type=type)
return HttpResponse(request, {
"place" : place
}
Run Code Online (Sandbox Code Playgroud)
那么另外两个可能是:
def business_get_place(type):
# Trivial in this case, used for consistency
return data_get_place(type)
def data_get_place(type):
# Get a place of specified type from the cache, or db,
# …Run Code Online (Sandbox Code Playgroud) 我正在使用 Sendgrid Python 库,并且我想在“reply_to”字段中向多人发送电子邮件。
我想向 2 个人发送一封电子邮件,以便两个用户都可以通过点击回复来互相发送电子邮件。最简单的解决方案似乎是将两个用户都放在回复字段中。
我在 Sendgrid 文档中没有看到任何方法可以做到这一点——他们似乎只想在“reply_to”字段中包含一个电子邮件地址字符串。但是,我知道具有此特征的电子邮件是可能的(请原谅预算编辑工作):

无论如何,正如您所看到的,“回复”中可以有多个条目。那么有人知道如何使用 Sendgrid 做到这一点吗?
我正在第一次尝试使用库,我注意到解决库内导入问题的最简单方法是使用如下构造:
from . import x
from ..some_module import y
Run Code Online (Sandbox Code Playgroud)
关于这一点的事情让我觉得"不好".也许这只是我不记得经常看到它的事实,尽管公平地说我并没有围绕着大量图书馆的内容.
只是想看看这是否被认为是好的做法,如果不是,那么更好的方法是什么?