小编Kho*_*rak的帖子

Eventlet或gevent或Stackless + Twisted,Pylons,Django和SQL Alchemy

我们广泛使用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通常是你处于线程思维中的地方,但无论如何.然而,如果那个猴子补丁的东西真的像那样工作那么哇.哇哇!

python pypy gevent eventlet python-stackless

36
推荐指数
1
解决办法
2万
查看次数

Twisted + SQLAlchemy以及最好的方法

所以我正在编写另一个基于Twisted的守护进程.它将像往常一样有一个xmlrpc接口,因此我可以轻松地与它进行通信,并让其他进程根据需要与它交换数据.

该守护进程需要访问数据库.我们一直在使用SQL Alchemy代替我们最新项目的硬编码SQL字符串 - 这些项目主要用于Pylons中的Web应用程序.

我们想对这个应用程序做同样的事情并重新使用利用SQL Alchemy的库代码.那么该怎么办?当然,因为该库是为Pylons应用程序编写的,所以每个人都习惯使用的所有直接阻塞样式代码,所有非阻塞都由Pylons通过线程,线程本地,范围会话等神奇地处理.上.

所以现在对Twisted我想我有点卡住了.我可以:

  1. 如果它是最小的,请直接编写我需要的sql,并在我需要命中db时使用twisted中的dbapi池来执行runInteractions等.
  2. 在我们的库中使用对象和固有的阻塞方法,然后在我的Twisted守护进程中阻塞.呸.
  3. 使用2008年最后一次更新的sAsync,并重用我们已经定义的模型但不是真的,这并不能解决库代码也需要在Pylons中工作的问题.这甚至适用于最新版本的SQL Alchemy吗?谁知道.那个项目看起来很棒 - 它为什么显然被抛弃了?
  4. 生成一个单独的子进程并让它处理库代码及其所有阻塞,结果返回到我的守护进程准备好后作为通过YAML通过xmlrpc编组的对象.
  5. 使用deferToThread,然后删除返回的对象,确保执行急切的加载,以便我拥有我可能需要的所有东西.对我来说似乎有些丑陋.

我也坚持使用Python 2.5.4 atm所以还没有2.6,我不认为我可以从未来进行导入以获得那里很酷的新多处理模块的东西.虽然我认为我们已经很好地处理了进程间通信,但这没关系.

所以我倾向于选项4,因为这样可以避免与选项1的逻辑重复的致命罪,同时也避免线程.

我的第一次尝试将是选项2,只是让事情继续进行,然后将对库代码的调用分离出来,如果它看起来好像很可能需要花费太长时间才能阻塞.伤心.也许Stackless Python和Twisted的组合在这里会很有趣.

有更好的想法吗?

python sql database sqlalchemy twisted

31
推荐指数
3
解决办法
8325
查看次数

有没有免费的OpenCV分类器库?

在python中修补OpenCV.面部检测演示令人印象深刻.

除了脸部,眼睛和全身之外,还有免费的哈尔分类器吗?

opencv

12
推荐指数
1
解决办法
6365
查看次数

为什么要使用区分大小写的数据库?

在不区分大小写的情况下选择区分大小写的排序规则有哪些原因?在进行字符串比较时,我可以看到数据库引擎可能获得适度的性能提升.是吗?如果您的数据设置为全部为低或大写,则区分大小写可能是合理的,但如果您存储混合大小写数据然后尝试查询它,那将是一场灾难.然后你必须在列上应用lower()函数,以便它匹配相应的小写字符串文字.这可以防止我使用的每个dbms中的索引使用.所以想知道为什么有人会使用这样的选择.

database collation

8
推荐指数
1
解决办法
1208
查看次数

如何使用xpath表达式在PostgreSQL中的XML列上创建索引?

尝试在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.

一些示例插入语句也是: …

xml postgresql indexing xpath aws-aurora

8
推荐指数
1
解决办法
810
查看次数

如何在Riak中停用或删除存储桶类型?

/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的情况下摆脱这些吗?

riak

7
推荐指数
1
解决办法
2418
查看次数

需要一种方法来确定是否写入了文件

我所处的情况是这样的 - 有一个进程写入文件,有时文件相当大,比如400 - 500MB.我需要知道什么时候写完了.我怎么能确定这个?如果我查看目录,我会在那里看到它,但可能没有写完.此外,这需要远程完成 - 例如在同一个内部局域网上,而不是在同一台计算机上,通常想要知道文件写入完成的过程是在Linux机器上运行的,其中包含写入文件的进程和文件本身在Windows框中.没有桑巴不是一个选择.与该窗口框上的服务进行xmlrpc通信是一种选择,也可以使用snmp检查是否可行.

理想的情况下

  • 可在Linux或Windows上运行 - 这意味着该解决方案与操作系统无关.
  • 适用于任何类型的文件.

够好了:

  • 仅适用于Windows,但可以通过某些库或任何可以通过Python访问的库来完成.
  • 仅适用于PDF文件.

当前最好的想法是定期从Windows框中的某个进程打开有问题的文件,并查看检查PDF结束标记的最后字节并考虑eol差异,因为该文件可能是在Linux或Windows上创建的.

python linux windows pdf file-io

6
推荐指数
2
解决办法
5549
查看次数

处理视图的MySQL Temp Table算法

如果将Temp Table算法重命名为Unscalable算法会很好.当在视图定义中看到它时,它可能会给开发人员提供更多警告 - 类似于在解释结果中使用临时表时.在大多数情况下只是一个诙谐的请求,但实际上它对于不知情的人来说是灾难性的.

麻烦的是,如果你在视图定义中做某些事情,它将从合理的合并算法切换到无望的低效临时表算法.如果涉及的数据很少,这没什么大不了的.但是,随着数据的增长,这将会破坏您的性能.

尽管如何最好地处理这个问题?这是一个问题,因为观点是在5年前实施的,我不知道有任何修复它的努力.这种问题是否存在于其他流行的数据库系统中?

向下滚动到下面的链接,讨论何时不能使用合并算法来查看导致MySQL使用糟糕的Temp Table算法退化的原因:http: //mysql2.mirrors-r-us.net/doc/refman/ 5.1/EN /创建-view.html

这有什么不好的?临时表算法的工作原理如下:

  1. 在视图定义中"按原样"运行视图,而不将查询的where子句标准合并到其中.
  2. 将结果数据转储到临时表中.
  3. 根据查询的where子句标准过滤临时表中的数据 - 此处也没有索引.

所以你可以想象当你有一个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小时后返回结果......

那么如何最好地应对这种情况呢?

mysql algorithm merge views temp-tables

5
推荐指数
1
解决办法
2337
查看次数

Rust 书单元测试示例导致死代码警告 - 为什么?

在学习 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)

unit-testing dead-code rust

3
推荐指数
1
解决办法
973
查看次数