在今晚尝试追踪Python程序中的资源泄漏时,我发现现代ORM使得工作变得非常困难.事实上,当你开始检查其属性时,一个实际上独自坐在没有孩子的内存中的对象会突然出现有十几个关联对象,因为当然,每个属性取消引用都会调用一个描述符来提取其他信息.飞.
我甚至注意到,做一个简单print的特定对象就完成了数据库查询并将更多链接对象拉入内存 - 破坏了我一直在计算的细致引用计数 - 因为它__repr__()构建了一些关联对象的显示名称.
事实上,有一些技术允许在不影响对象的情况下检查对象- 像type(obj)和id(obj)等操作obj.__dict__.(但不是打印的__dict__,因为调用__repr__()在字典中的每一个值!)有没有人结合这几个"安全"的检查方法的支持,在像Python调试,检查方便,探索Python对象图的提示,以便我可以看到这些文件在哪里打开,让我运行文件描述符?
基本上,我需要一种反海森堡工具,它可以防止我的检查行为产生任何副作用!
"检查"模块:
一个答案表明我尝试了inspect()模块,但它看起来像是取消引用你提供的对象的每个属性:
import inspect
class Thing(object):
@property
def one(self):
print 'one() got called!'
return 1
t = Thing()
inspect.getmembers(t)
Run Code Online (Sandbox Code Playgroud)
这输出:
one() got called!
[('__class__', <class '__main__.Thing'>),
('__delattr__', <method-wrapper '__delattr__'…),
…
('one', 1)]
Run Code Online (Sandbox Code Playgroud) 我正在寻找python或相关库中的库或函数调用,这将允许我提供表示HTTP req/res的原始文本数据流,并且会吐出该信息是某种有意义的形式,如字典或名单.我不想使用一些内置的类或创建一堆新对象,在我的程序中我收到一些原始数据,这正是我必须使用的.有没有解决方案,或者我必须自己编写HTTP解析器?
编辑:让我澄清一下我到底要做什么.我正在寻找一些像以下字符串的东西:
GET /index.html HTTP/1.1 \r\n
Host:www.stackoverflow.com \r\n
User-Agent:Firefox \r\n
etc.
Run Code Online (Sandbox Code Playgroud)
并寄回一些封装方法,HTTP版本,标题和其他内容的东西.
一对printf()调试语句显示,当我在接收端取消引用时,指向我传递的double的指针将作为不同的值出现 - 但仅限于Microsoft Visual Studio(版本9.0).步骤很简单:
double rho=0; /* distance from the Earth */
/* ... */
for (pass = 0; pass < 2; pass++) {
/* ... */
rho = sqrt(rsn*rsn+rp*rp-2*rsn*rp*cpsi*cos(ll));
printf("\nrho from sqrt(): %f\n", rho);
/* ... */
}
/* ... */
cir_sky (np, lpd, psi, rp, &rho, lam, bet, lsn, rsn, op);
/* ... */
}
/* ... */
static void
cir_sky (
/* ... */
double *rho, /* dist from earth: in as geo, back …Run Code Online (Sandbox Code Playgroud) 实际设计:
对于那些回到这个问题的人,下面的有用答案将我推向了一个运行良好的可行设计.三个见解是关键:
recv()或同时send()从同一个套接字尝试,那么Eventlet会优雅地杀死第二个greenlet.这非常棒,意味着如果amqplib"绿色"不佳,将导致简单的异常,而不是不可能重现数据交错错误.amqplib方法大致分为两组:wait()内部循环recv()直到组装AMQP消息,而其他方法send()消息返回并且不会尝试自己的recv().鉴于amqplib作者不知道有人试图"绿化"他们的图书馆,这是非常好的运气!这意味着消息发送不仅可以安全地从调用的回调中获取wait(),而且消息也可以安全地从完全不在wait()循环控制之外的其他greenlet发送.这些安全的方法 - 可以从任何greenlet调用,而不仅仅是从wait()回调调用 - 是:
basic_ackbasic_consume 同 nowait=Truebasic_publishbasic_recoverbasic_rejectexchange_declare 同 nowait=Trueexchange_delete 同 nowait=Truequeue_bind 同 nowait=Truequeue_unbind 同 nowait=Truequeue_declare 同 nowait=Truequeue_delete 同 nowait=Truequeue_purge 同 nowait=True1,然后acquire()与release()锁定和解锁.我想要写消息的所有异步greenlet都可以使用这样的锁来避免它们的单独send()调用交错并破坏AMQP协议.所以我的代码大致如下:
amqp = eventlet.patcher.import_patched('amqplib.client_0_8')
class Processor(object):
def __init__(self):
write_lock …Run Code Online (Sandbox Code Playgroud) 我需要Django Admin界面来接受Excel文件的管理员上传,其中每个Excel文件中的数据都插入到我的数据库模型中.如何在Django模型管理页面上显示这样的"上传"按钮,点击该按钮要求管理员选择一个.xls文件,一旦上传完成,该数据的数据会被添加到数据库中?
有几个实用程序 - 都具有不同的过程,限制和目标操作系统 - 用于获取Python包及其所有依赖项,并将它们转换为易于发送给客户的单个二进制程序:
我的情况更进一步:第三方开发人员希望为我的应用程序编写插件,扩展或附加组件.当然,一个令人生畏的问题是,像Windows这样的平台上的用户最容易安装插件或插件,以便我的应用程序可以轻松发现它们已经安装.但除此基本问题之外还有另外一个问题:第三方开发人员如何将扩展与扩展本身需要的任何库(可能是二进制模块,如lxml)捆绑在一起,以便插件的依赖关系可以在同一时间导入插件可用的时间.
怎么能接近这个?我的应用程序是否需要在磁盘上使用自己的插件区域以及自己的插件注册表来使其易于处理?或者是否有一些通用机制,我可以避免自己编写,这将允许作为单个可执行文件分发的应用程序环顾四周并找到也作为单个文件安装的插件?
当我的浏览器从网站下载图像时,不涉及base64编码.它发出比如一个HTTP命令GET /image.jpg,并且接收其的HTTP响应Content-Type是一样的东西image/jpg,其Content-Length是一个字节的图像中,其主体是原始二进制图像数据本身的数量,和.数据既不使用字符集编码,也不使用base64等编码进行编码.
编写RESTful资源已经训练我期望HTTP之间的对称性GET,PUT因此,例如,当我执行a时,传递JSON数据的URL GET将在接受JSON数据时接受PUT.在任何情况下都不涉及表格编码; 在这两种情况下,只是Content-Length给出了有效载荷中的字节数,一个Content-Type标识声明有效载荷在某些字符集中是JSON,然后字符数据单独存在并且作为GET或的主体PUT.
我正在编写一个PhoneGap应用程序,让用户可以拍摄照片并使用我的应用程序上传照片.我本来以为我可以设计出这样的RESTful接口,支持对称GET和PUT-这样PUT的命令不涉及特殊的编码,也没有涉及到的字符集的任何想法,只是有一个Content-Type的image/jpg,然后二进制JPG数据质量作为其有效载荷.显然,这比尝试对表单内的图像进行编码更有效地使用带宽.当我PUT使用类似工具的URL 时,这种方法可以正常工作curl.
但我没有运气PUT从PhoneGap WebKit JavaScript 做一个干净的RESTful !PhoneGap愿意将图像作为本地file:URL 返回到我的JavaScript ,或者作为data:带有图像数据的内容由base64编码提供.但在这两种情况下,我都无法找到一种清晰的方法将图像转换为纯二进制格式(我会使用其中一个新的Blob对象吗?如果是这样,怎么做?)然后引起一个PUT,而不用额外的图层来装饰请求of form或encoding cruft,将简单地将原始图像作为HTTP请求有效负载通过线路传输到我的Web服务器.
有没有人知道如何将PUT原始图像作为身体引导WebKit到AJAX请求?感谢任何指针 - 甚至任何有用的答案,我接近这一切都错了!
可能重复:
有没有办法确定<select>下拉菜单是否打开?
一旦用户与我们的<select>元素交互,我的客户希望我显示一些简单的指令,以便导致<option>列表下拉(或者"放下",我想,因为如果没有太多空间,某些浏览器会向上打开在<select>盒子下面).一旦用户做出新的选择并因此导致选项列表消失,或者如果他们只是关闭选项列表而不进行更改,则指令应该再次消失.
我认为我在使用CSS/CSS3选择器和jQuery事件时非常有经验,使得<div>充满指令的内容出现并消失,但对于这种情况,我无法确定是否有办法告诉何时a <select>box不仅仅是"活动"或"聚焦" - 当选择框仍然关闭而不显示其选项列表时,两者都可以为真 - 但实际上是打开的.我测试的CSS伪选择器或jQuery事件都没有让我"看到",更不用说回应<select>盒子的开放状态或封闭状态了.
有谁知道如何设置触发器或编写一个CSS规则,取决于当前是否显示选项列表?
提供的API gevent.http.HTTPServer似乎支持双向流式传输.请求对象不提供请求体作为简单字符串,而是提供.input_bufferPython可迭代的属性,而在另一个方向,响应的数据可以作为具有三个调用的块传递:
request.send_reply_start(200, 'OK')
request.send_reply_chunk(...) # as many times as you wish
request.send_reply_end()
Run Code Online (Sandbox Code Playgroud)
但我必须有一些错误配置的东西,因为尽管这个奇妙的无缓冲的API,我的请求处理程序直到最后一块请求POST数据终于到达时才被调用,而在另一方向我没有看到任何标题到达我的客户端套接字直到服务器到达.send_reply_end().是否有一些我必须抛出的开关或一些配置设置,我必须操作以关闭缓冲并查看请求并在它们到达时发送响应,例如gevent通过其支持原始套接字StreamServer?
我的应用程序需要支持可能比RAM大的单文件上载和下载,这将需要关闭此缓冲.
这是一个简单的服务器和使用gevent编写的客户端,它应该显示这种行为:
# srv.py
import gevent.http
M100 = 100 * 1024 * 1024
def main():
print 'Serving on 8088...'
gevent.http.HTTPServer(('0.0.0.0', 8088), handle).serve_forever()
def handle(request):
print 'Is request chunked?', request.chunked
for item in request.input_buffer:
print 'received body segment of length', len(item), 'bytes'
request.add_output_header('Content-Type', 'application/octet-stream')
request.send_reply_start(200, 'OK')
for i in range(5):
print 'sending chunk', i
request.send_reply_chunk(M100 * …Run Code Online (Sandbox Code Playgroud) 为了证实我明白大熊猫df.groupby()和df.reset_index()做什么,我试图做从数据帧的往返相同的数据和背部的分组版本.在往返之后,列和行必须再次排序,因为groupby()影响行顺序并reset_index()影响列顺序,但经过两次快速操作将列和索引按顺序排列后,数据帧看起来相同:
然而,在所有这些检查成功后,df1.equals(df5)返回惊人的价值False.
这些数据帧之间有什么区别,equals()发现我还没弄明白如何检查自己?
测试代码:
csv_text = """\
Title,Year,Director
North by Northwest,1959,Alfred Hitchcock
Notorious,1946,Alfred Hitchcock
The Philadelphia Story,1940,George Cukor
To Catch a Thief,1955,Alfred Hitchcock
His Girl Friday,1940,Howard Hawks
"""
import pandas as pd
df1 = pd.read_csv('sample.csv')
df1.columns = map(str.lower, df1.columns)
print(df1)
df2 = df1.groupby(['director', df1.index]).first()
df3 = df2.reset_index('director')
df4 = df3[['title', 'year', 'director']]
df5 = df4.sort_index()
print(df5)
print()
print(repr(df1.columns))
print(repr(df5.columns))
print()
print(df1.dtypes)
print(df5.dtypes) …Run Code Online (Sandbox Code Playgroud)