我们广泛使用Twisted来处理需要大量异步io的应用程序.在某些情况下,东西是cpu绑定的,为此我们产生了一个进程池来完成工作,并有一个系统来管理多个服务器上的这些 - 所有这些都是在Twisted中完成的.效果很好.问题是很难让新团队成员加快速度.在Twisted中编写异步代码需要近乎垂直的学习曲线.就像人类自然不这么认为那样.
我们也许正在考虑采用混合方法.也许保持xmlrpc服务器部分和进程管理在Twisted中并在代码中实现其他东西,至少在某种程度上看起来是同步的,而不是这样.然后我又喜欢明确的隐含,所以我不得不考虑更多.无论如何,在greenlets上 - 这些东西有多好用?所以有Stackless,你可以从我的Gallentean头像中看到,我很清楚它在第一手使用CCP的旗舰EVE Online游戏方面取得了巨大的成功.那么Eventlet或gevent呢?好吧现在只有Eventlet与Twisted一起使用.然而gevent声称速度更快,因为它不是纯粹的python实现,而是依赖于libevent.它还声称具有较少的特性和缺陷.GEVENT据我所知,它由1个人维护.这让我有点怀疑,但是所有伟大的项目都是这样开始的...然后就是PyPy - 我还没有读完那篇文章 - 只是在这个帖子中看到它:Stackless的缺点.
令人困惑 - 我想知道该怎么做 - 听起来像Eventlet可能是最好的选择,但它真的足够稳定吗?那里的任何人有经验吗?我们应该选择Stackless,因为它已经存在并且是经过验证的技术 - 就像Twisted一样 - 并且它们可以很好地协同工作.但我仍然不愿意使用单独的Python版本来完成这项工作.该怎么办....
这个有点令人讨厌的博客文章对我来说很重要:对于Grownups的异步IO 我没有得到Twisted就像Java一样对我而言Java通常是你处于线程思维中的地方,但无论如何.然而,如果那个猴子补丁的东西真的像那样工作那么哇.哇哇!
所以我正在编写另一个基于Twisted的守护进程.它将像往常一样有一个xmlrpc接口,因此我可以轻松地与它进行通信,并让其他进程根据需要与它交换数据.
该守护进程需要访问数据库.我们一直在使用SQL Alchemy代替我们最新项目的硬编码SQL字符串 - 这些项目主要用于Pylons中的Web应用程序.
我们想对这个应用程序做同样的事情并重新使用利用SQL Alchemy的库代码.那么该怎么办?当然,因为该库是为Pylons应用程序编写的,所以每个人都习惯使用的所有直接阻塞样式代码,所有非阻塞都由Pylons通过线程,线程本地,范围会话等神奇地处理.上.
所以现在对Twisted我想我有点卡住了.我可以:
我也坚持使用Python 2.5.4 atm所以还没有2.6,我不认为我可以从未来进行导入以获得那里很酷的新多处理模块的东西.虽然我认为我们已经很好地处理了进程间通信,但这没关系.
所以我倾向于选项4,因为这样可以避免与选项1的逻辑重复的致命罪,同时也避免线程.
我的第一次尝试将是选项2,只是让事情继续进行,然后将对库代码的调用分离出来,如果它看起来好像很可能需要花费太长时间才能阻塞.伤心.也许Stackless Python和Twisted的组合在这里会很有趣.
有更好的想法吗?
在python中修补OpenCV.面部检测演示令人印象深刻.
除了脸部,眼睛和全身之外,还有免费的哈尔分类器吗?
在不区分大小写的情况下选择区分大小写的排序规则有哪些原因?在进行字符串比较时,我可以看到数据库引擎可能获得适度的性能提升.是吗?如果您的数据设置为全部为低或大写,则区分大小写可能是合理的,但如果您存储混合大小写数据然后尝试查询它,那将是一场灾难.然后你必须在列上应用lower()函数,以便它匹配相应的小写字符串文字.这可以防止我使用的每个dbms中的索引使用.所以想知道为什么有人会使用这样的选择.
尝试在AuroraDB上使用xpath表达式的XML数据类型列上创建btree索引时遇到此错误 - PostgreSQL 9.6:
ERROR: could not identify a comparison function for type xml
SQL state: 42883
Run Code Online (Sandbox Code Playgroud)
没有明确解决方案的这个2009线程是我发现讨论此错误消息的唯一一个关于为更早版本的PostgreSQL创建基于xpath的索引:https: //www.postgresql-archive.org/Slow-select -times上选,用,XPath的td2074839.html
在我的情况下,我也需要指定名称空间,并且该线程中的原始海报将xpath表达式的结果转换为text [],这对我来说也是错误的 - 但为什么甚至需要呢?我也没有看到PostgreSQL使用我的索引,即使我有数千行要经过.
所以我尝试了一个更简单的案例,但错误仍然存在 - 请详细说明为什么你可以:
CREATE TABLE test
(
id integer NOT NULL,
xml_data xml NOT NULL,
CONSTRAINT test_pkey PRIMARY KEY (id)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
CREATE INDEX test_idx
ON test USING btree
(xpath('/book/title', xml_data))
Run Code Online (Sandbox Code Playgroud)
结果消息是:
ERROR: could not identify a comparison function for type xml
SQL state: 42883
Run Code Online (Sandbox Code Playgroud)
数据库编码是UTF8.排序规则和字符类型为en_US.UTF-8.
一些示例插入语句也是: …
/home/khorkak> sudo riak-admin bucket-type
Usage: riak-admin bucket-type <command>
The follow commands can be used to manage bucket types for the cluster:
list List all bucket types and their activation status
status <type> Display the status and properties of a type
activate <type> Activate a type
create <type> <json> Create or modify a type before activation
update <type> <json> Update a type after activation
/home/khorkak>
Run Code Online (Sandbox Code Playgroud)
好吧,我在尝试一些我不再需要的东西时创建了一组桶类型 - 我可以在不重新安装Riak的情况下摆脱这些吗?
我所处的情况是这样的 - 有一个进程写入文件,有时文件相当大,比如400 - 500MB.我需要知道什么时候写完了.我怎么能确定这个?如果我查看目录,我会在那里看到它,但可能没有写完.此外,这需要远程完成 - 例如在同一个内部局域网上,而不是在同一台计算机上,通常想要知道文件写入完成的过程是在Linux机器上运行的,其中包含写入文件的进程和文件本身在Windows框中.没有桑巴不是一个选择.与该窗口框上的服务进行xmlrpc通信是一种选择,也可以使用snmp检查是否可行.
理想的情况下
够好了:
当前最好的想法是定期从Windows框中的某个进程打开有问题的文件,并查看检查PDF结束标记的最后字节并考虑eol差异,因为该文件可能是在Linux或Windows上创建的.
如果将Temp Table算法重命名为Unscalable算法会很好.当在视图定义中看到它时,它可能会给开发人员提供更多警告 - 类似于在解释结果中使用临时表时.在大多数情况下只是一个诙谐的请求,但实际上它对于不知情的人来说是灾难性的.
麻烦的是,如果你在视图定义中做某些事情,它将从合理的合并算法切换到无望的低效临时表算法.如果涉及的数据很少,这没什么大不了的.但是,随着数据的增长,这将会破坏您的性能.
尽管如何最好地处理这个问题?这是一个问题,因为观点是在5年前实施的,我不知道有任何修复它的努力.这种问题是否存在于其他流行的数据库系统中?
向下滚动到下面的链接,讨论何时不能使用合并算法来查看导致MySQL使用糟糕的Temp Table算法退化的原因:http: //mysql2.mirrors-r-us.net/doc/refman/ 5.1/EN /创建-view.html
这有什么不好的?临时表算法的工作原理如下:
所以你可以想象当你有一个5000万行表和一个视图定义时所涉及的地狱 - 愚蠢的例子,但你得到了重点:
create view last_order_date as
select max(order_date) last_date, username from orders group by username;
Run Code Online (Sandbox Code Playgroud)
然后用户可以写:
select * from last_order_date where username = 'joejoe22'
Run Code Online (Sandbox Code Playgroud)
2小时后返回结果......
那么如何最好地应对这种情况呢?
在学习 Rust 并尝试 Rust 书中的示例单元测试相关代码时:https://doc.rust-lang.org/book/ch11-01-writing-tests.html
我收到一条关于死代码的警告,这些代码显然正在由单元测试执行。这是为什么?
lib.rs 中的代码
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
fn can_hold(&self, other: &Rectangle) -> bool {
self.width > other.width && self.height > other.height
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn larger_can_hold_smaller() {
let larger = Rectangle {
width: 8,
height: 7,
};
let smaller = Rectangle {
width: 5,
height: 1,
};
assert!(larger.can_hold(&smaller));
}
}
Run Code Online (Sandbox Code Playgroud)
运行货物测试时的结果
$ cargo test
Compiling adder v0.1.0 (/Users/khorkrak/projects/rust/adder)
warning: associated function …Run Code Online (Sandbox Code Playgroud) python ×3
database ×2
algorithm ×1
aws-aurora ×1
collation ×1
dead-code ×1
eventlet ×1
file-io ×1
gevent ×1
indexing ×1
linux ×1
merge ×1
mysql ×1
opencv ×1
pdf ×1
postgresql ×1
pypy ×1
riak ×1
rust ×1
sql ×1
sqlalchemy ×1
temp-tables ×1
twisted ×1
unit-testing ×1
views ×1
windows ×1
xml ×1
xpath ×1