我正在构建一个WSGI Web应用程序,我有一个MySQL数据库.我正在使用MySQLdb,它提供了执行语句和获取结果的游标.获取和关闭游标的标准做法是什么?特别是,我的游标应该持续多久?我应该为每笔交易获得一个新光标吗?
我相信你需要在提交连接之前关闭光标.查找不需要中间提交的事务集是否有任何显着优势,这样您就不必为每个事务获取新游标?获得新游标是否有很多开销,或者这不是什么大不了的事?
我想with在某些条件下退出声明:
with open(path) as f:
print 'before condition'
if <condition>: break #syntax error!
print 'after condition'
Run Code Online (Sandbox Code Playgroud)
当然,上述方法不起作用.有没有办法做到这一点?(我知道我可以改变这种情况:if not <condition>: print 'after condition'- 任何方式就像上面那样?)
我有一个100M行csv文件(实际上很多单独的csv文件)总共84GB.我需要将它转换为具有单个float数据集的HDF5文件.我在测试中使用了h5py而没有任何问题,但是现在我不能在没有内存耗尽的情况下完成最终的数据集.
如何在不必将整个数据集存储在内存中的情况下写入HDF5?我在这里期待实际代码,因为它应该非常简单.
我只是在研究pytables,但它看起来不像数组类(对应于HDF5数据集)可以迭代编写.同样,熊猫拥有read_csv和to_hdf在它的方法io_tools,但我不能在同一时间加载整个数据集,这样将无法正常工作.也许你可以帮我用pytables或pandas中的其他工具正确解决问题.
我想在每次页面更改时执行一些代码.
我可以ngOnDestroy为每个页面添加一个方法.似乎我可以使用Ionic 2页面生命周期钩子(例如ionViewDidUnload)获得完全相同的效果,但我没有费心去测试它.我宁愿在主app类中添加一个方法.
我看到你可以订阅Angular 2 路由器事件.如何翻译用于Ionic 2?我首先得到一个错误import { Router } from '@angular/router;:
TypeScript error: <path>/node_modules/@angular/router/src/common_router_providers.d.ts(9,55): Error TS2305: Module '"<path>/node_modules/@angular/core/index"' has no exported member 'NgModuleFactoryLoader'.
TypeScript error: <path>/node_modules/@angular/router/src/router.d.ts(14,39): Error TS2305: Module '"<path>/node_modules/@angular/core/index"' has no exported member 'NgModuleFactoryLoader'.
TypeScript error: <path>/node_modules/@angular/router/src/router_module.d.ts(9,10): Error TS2305: Module '"<path>/node_modules/@angular/core/index"' has no exported member 'ModuleWithProviders'.
Run Code Online (Sandbox Code Playgroud)
webpack配置
var path = require('path');
module.exports = {
entry: [
path.normalize('es6-shim/es6-shim.min'),
'reflect-metadata',
path.normalize('zone.js/dist/zone'),
path.resolve('app/app.ts')
],
output: {
path: path.resolve('www/build/js'),
filename: 'app.bundle.js',
pathinfo: false …Run Code Online (Sandbox Code Playgroud) MySQLdb Connections有一个基本的上下文管理器,可以在enter上创建一个游标,在退出时回退或提交,并且隐式不会抑制异常.来自连接源:
def __enter__(self):
if self.get_autocommit():
self.query("BEGIN")
return self.cursor()
def __exit__(self, exc, value, tb):
if exc:
self.rollback()
else:
self.commit()
Run Code Online (Sandbox Code Playgroud)
那么,有没有人知道为什么光标在退出时没有关闭?
起初,我认为这是因为关闭游标没有做任何事情,并且游标只有一个关闭方法来参考Python DB API(参见本答案的评论).但是,事实是关闭光标会烧掉剩余的结果集(如果有),并禁用光标.从光标源:
def close(self):
"""Close the cursor. No further queries will be possible."""
if not self.connection: return
while self.nextset(): pass
self.connection = None
Run Code Online (Sandbox Code Playgroud)
在退出处关闭光标会很容易,所以我不得不假设它没有故意完成.另一方面,我们可以看到,当一个游标被删除时,无论如何它都会被关闭,所以我猜垃圾收集器最终会绕过它.我对Python中的垃圾收集知之甚少.
def __del__(self):
self.close()
self.errorhandler = None
self._result = None
Run Code Online (Sandbox Code Playgroud)
另一个猜测是,您可能希望在with块之后重新使用光标.但我想不出你为什么需要这样做的任何理由.难道你不能总是在其上下文中使用游标,并且只为下一个事务使用单独的上下文吗?
要非常清楚,这个例子显然没有意义:
with conn as cursor:
cursor.execute(select_stmt)
rows = …Run Code Online (Sandbox Code Playgroud) 在顶部,我注意到我的c程序(使用CUDA 3.2)的虚拟大小为28g或更多(查看VIRT),从一开始就进行每次运行.这对我来说没有任何意义.常驻内存是有意义的,在我最大的数据集上只有大约2g.我知道在过去的某个时刻虚拟大小不是那么大,但我不确定何时发生了变化.
为什么我的进程会使用28g的虚拟内存(或者为什么top的VIRT会如此之大)?据我所知,VIRT包括可执行二进制文件(仅437K),共享库和"数据区".什么是"数据区"?如何找出共享库需要多少内存?那个过程总内存的其他元素呢?
/ proc/<pid>/smaps(1022行)的内容:http://pastebin.com/fTJJneXr
其中一个来自smaps的条目显示其中一个占其中的MOST,但没有标签......我怎么能找出这个"空白"条目有28gb?
200000000-900000000 ---p 00000000 00:00 0
Size: 29360128 kB
Rss: 0 kB
Pss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 0 kB
Anonymous: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
Run Code Online (Sandbox Code Playgroud)
-
ubuntu 11.04 64位
16 GB RAM
我a VARCHAR(255), b INT在InnoDB表中有一个列索引.给定两a,b对,我可以使用MySQL索引来确定ac程序中的对是否相同(即不使用strcmp和数字比较)?
注意:这个问题的答案应该是:a)提供一种访问MySQL索引的方法以完成这项任务,或者b)解释为什么不能以这种方式实际访问/使用MySQL索引.特定于平台的答案很好,我在使用Red Hat 5.8.
下面是这个问题的先前版本,它提供了更多的背景,但似乎分散了实际问题的注意力.我知道在MySQL中有其他方法可以完成这个例子,我提供了两个.这不是关于优化的问题,而是分解出许多不同动态生成的查询中存在的复杂性.
我可以使用子分组的子选择来完成我的查询,例如
SELECT c, AVG(max_val)
FROM (
SELECT c, MAX(val) AS max_val
FROM table
GROUP BY a, b) AS t
GROUP BY c
Run Code Online (Sandbox Code Playgroud)
但我写了一个UDF,允许我用一个选择来做,例如
SELECT b, MY_UDF(a, b, val)
FROM table
GROUP by c
Run Code Online (Sandbox Code Playgroud)
这里的关键是,我穿过田野a和b对UDF,和我手动管理a,b各组群.列a是一个varchar,所以这涉及strncmp到检查匹配的调用,但速度相当快.
但是,我有一个索引my_key (a ASC, b ASC).而不是手动检查a和b上的匹配,我可以访问并使用MySQL索引吗?也就是说,我可以在my_key中获取a,bc中给定行或对的索引值(在UDF内)吗?如果是这样,指数值是否会保证对任何值都是唯一的a,b?
我想调用MY_UDF(a, b, val)然后(a,b)从UDF中查找c中的mysql索引值.
清除表单输入中的文本会导致Chrome中出现长时间延迟(多秒).这似乎导致了计算样式的重排或重新计算,但我不确定.Chrome的Profiler和时间线没有信息.
造成延误的原因是什么?我怎样才能消除它?这是我的代码中的错误,还是Chrome中的错误?
http://jsfiddle.net/jmilloy/dHFsQ/
要导致延迟,请键入输入,然后删除文本.删除最终字符或选择全部然后删除时将发生延迟.
为了消除延迟,使用row4,而不是row1,row2或row3.现在您可以清除输入而不会造成延迟.
延迟取决于n行数.
它出现在Chrome中,但不是Firefox.
它出现在Linux(Ubuntu/Mint 11)和Windows 7中,但不是OSX.谁能确认一下?
一旦我有一个表现出延迟行为的jsfiddle,我完全重写了这个问题,并用一个更简单的例子再次重写.
我有一些昏暗的数组,'time', 'lat', 'lon'有些只是'lat', 'lon'。为了使用2d(纬度)掩码来掩盖时间相关的数据,我经常必须这样做:
x.data[:, mask.data] = np.nan
Run Code Online (Sandbox Code Playgroud)
当然,计算会按预期进行广播。如果y是2d纬度数据,则将其值广播到x中的所有时间坐标:
z = x + y
Run Code Online (Sandbox Code Playgroud)
但是索引不会像我期望的那样广播。我希望能够执行此操作,但是会引发ValueError:缓冲区的维数错误:
x[mask] = np.nan
Run Code Online (Sandbox Code Playgroud)
最后,似乎xr.where 确实按预期跨时间坐标广播了掩码的值,但是您不能以这种方式设置值。
x_masked = x.where(mask)
Run Code Online (Sandbox Code Playgroud)
因此,在这里我缺少什么可以使用缺少尺寸(并且需要广播)的布尔掩码方便设置值的方法吗?我在顶部提供的选项确实是执行此操作的方式吗(在这种情况下,我不妨使用标准的numpy数组...)
我的python/wsgi网络应用程序中的会话有问题.每个2个wsgi守护进程中的每个线程都有一个不同的,持久的mysqldb连接.有时,在删除旧会话并创建新会话后,某些连接仍然会在select中获取旧会话,这意味着它们无法验证会话并再次请求登录.
详细信息:会话存储在本地mysql数据库的InnoDB表中.验证(通过CAS)之后,我删除该用户的任何以前的会议中,创建一个新的会话(插入行),提交事务,并重定向到最初请求的页面与Cookie中的新的会话ID.对于每个请求,将根据数据库中的会话检查cookie中的会话ID.
有时,重定向后在数据库中找不到新创建的会话.相反,该用户的旧会话仍然存在.(我通过选择并记录每个请求开头的所有会话来检查这一点).不知何故,我得到了缓存的结果.我尝试用SQL_NO_CACHE选择会话,但没有区别.
为什么我得到缓存结果?还有什么地方可以进行缓存,以及如何阻止缓存或刷新缓存?基本上,为什么其他连接无法看到新插入的数据?