小编use*_*375的帖子

在创建表之后向SQLAlchemy模型添加索引

我有一个flask-sqlalchemy模型:

class MyModel(db.Model):
__tablename__ = 'targets'
id = db.Column(db.Integer, primary_key=True)
url = db.Column(db.String(2048))
Run Code Online (Sandbox Code Playgroud)

该表已经创建并正在使用中.我想在url属性上创建一个索引,所以我将index = True传递给它:

url = db.Column(db.String(2048), index=True)
Run Code Online (Sandbox Code Playgroud)

如何在不删除和重新创建表的情况下使此索引生效?

python indexing sqlalchemy

25
推荐指数
5
解决办法
2万
查看次数

Gevent monkeypatching打破多处理

我试图使用多处理池来运行一组进程,每个进程都运行一个gelet池.原因是有很多网络活动,但也有很多CPU活动,所以为了最大化我的带宽和我所有的CPU核心,我需要多个进程和gevent的异步猴子补丁.我正在使用多处理管理器来创建一个队列,进程将访问该队列以获取要处理的数据.

这是代码的简化片段:

import multiprocessing

from gevent import monkey
monkey.patch_all(thread=False)

manager = multiprocessing.Manager()
q = manager.Queue()
Run Code Online (Sandbox Code Playgroud)

以下是它产生的例外情况:

Traceback (most recent call last):
  File "multimonkeytest.py", line 7, in <module>
    q = manager.Queue()
  File "/usr/local/Cellar/python/2.7.2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/managers.py", line 667, in temp
    token, exp = self._create(typeid, *args, **kwds)
  File "/usr/local/Cellar/python/2.7.2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/managers.py", line 565, in _create
    conn = self._Client(self._address, authkey=self._authkey)
  File "/usr/local/Cellar/python/2.7.2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/connection.py", line 175, in Client
    answer_challenge(c, authkey)
  File "/usr/local/Cellar/python/2.7.2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/connection.py", line 409, in answer_challenge
    message = connection.recv_bytes(256)         # reject large message
 IOError: [Errno 35] Resource temporarily unavailable
Run Code Online (Sandbox Code Playgroud)

我相信这一定是由于普通套接字模块和gevent套接字模块的行为有所不同. …

python multiprocessing gevent

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

当目标架构是 WASM 时默认启用 Cargo 功能?

我的板条箱的 Cargo.toml 的一部分:

[features]
wasm = ["ed25519-dalek/nightly", "rand/wasm-bindgen", "js-sys"]
Run Code Online (Sandbox Code Playgroud)

当在另一个项目中使用该板条箱并且明确选择“wasm”功能时,这是有效的。

我想仅当目标架构是 WASM 时自动启用此功能。我尝试添加这个:

#[cfg(target_arch = "wasm32")]
default = ["wasm"]
Run Code Online (Sandbox Code Playgroud)

当我针对 WASM 以外的目标进行编译时,“wasm”作为默认值包含在内,如何仅当目标是 WASM 时才将“wasm”设为默认值?

rust rust-cargo wasm-bindgen

10
推荐指数
1
解决办法
4919
查看次数

Python猴子修补

我需要monkeypatch请求的Response类(版本1.0.4,此问题的当前版本),以添加其他方法.

我有这个代码:

import requests

class Response(requests.models.Response):
    def hmm(self):
        return 'ok'

requests.models.Response = Response

r = requests.get('http://bbc.co.uk')

print r
Run Code Online (Sandbox Code Playgroud)

原始响应调用super()时失败 - https://github.com/kennethreitz/requests/blob/master/requests/models.py#L391

我认为这是因为它变得困惑,因为我已经取代了课程,我觉得我在做一些愚蠢的事情,任何想法?提前致谢.

python monkeypatching

9
推荐指数
2
解决办法
3964
查看次数

用Flask流式生成CSV

我具有用于流文本文件的此功能:

def txt_response(filename, iterator):
    if not filename.endswith('.txt'):
        filename += '.txt'
    filename = filename.format(date=str(datetime.date.today()).replace(' ', '_'))
    response = Response((_.encode('utf-8')+'\r\n' for _ in iterator), mimetype='text/txt')
    response.headers['Content-Disposition'] = 'attachment; filename={filename}'.format(filename=filename)
    return response
Run Code Online (Sandbox Code Playgroud)

我正在研究如何以类似方式流式传输CSV。该页面提供了一个示例,但我希望使用CSV模块。

我可以StringIO为每一行使用并创建一个新的“文件”和CSV编写器,但是效率似乎很低。有没有更好的办法?

python csv streaming flask

6
推荐指数
1
解决办法
4290
查看次数

如何将Rayon与现有迭代器一起使用?

HashSet做了一些过滤之后把一个正则表达式变成了一个.我试图将它与Rayon一起使用,但是我无法弄清楚如何使Rayon与现有的迭代器一起工作而不将它首先转换为矢量.这可能吗?

let re = Regex::new("url=\"(?P<url>.+?)\"").unwrap();
let urls: HashSet<String> = re.captures_iter(&contents)
    .map(|m| Url::parse(m.name("url").unwrap().as_str()))
    .filter(|parsed_url| parsed_url.is_ok())
    .map(|parsed_url| parsed_url.unwrap())
    .filter(|parsed_url| parsed_url.has_host())
    .map(|parsed_url| parsed_url.into_string())
    .collect();
Run Code Online (Sandbox Code Playgroud)

rust rayon

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

"记忆泄漏"与问候?

这是脚本的精简版本,导致内存使用量持续增加,我看到它在2分钟后超过600MB:

import requests
import grequests

lines = (grequests.get(l.strip(), timeout=15) for l in open('links.txt') if len(l.strip()))

for r in grequests.imap(lines, size=20):
    if r.ok:
        print r.url
Run Code Online (Sandbox Code Playgroud)

links.txt是一个包含大量网址的文件,问题出现在我收集的几个大网址组中.在我看来,响应对象可能没有被尊重?

我今天更新了gevent,请求和问候,这是他们的版本:

In [2]: gevent.version_info
Out[2]: (1, 0, 0, 'beta', 3)

In [5]: requests.__version__
Out[5]: '0.13.5'
Run Code Online (Sandbox Code Playgroud)

grequests没有我能找到的版本号.

提前感谢您的任何答案.

python gevent python-requests

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

将Kubernetes集群部署到Digital Ocean?

似乎get.k8s.io是部署Kubernetes集群的推荐方法,但是此脚本不支持Digital Ocean。

是否有其他方法可以轻松在我错过的Digital Ocean上建立集群?

谢谢

digital-ocean kubernetes

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

如何使用reqwest执行并行异步HTTP GET请求?

异步示例很有用,但作为Rust和Tokio的新手,我正在努力研究如何一次执行N个请求,使用向量中的URL,并为每个URL创建响应HTML的迭代器作为字符串.

怎么可以这样做?

rust rust-tokio reqwest

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

有没有办法直接消耗Rayon链而不先收集它?

我正在使用 Rayon 产生相当大的返回值。将所有返回值收集到Vec. 有没有办法避免创建 aVec并直接将其作为可迭代对象使用?

这是一个不起作用的例子:

fn main() {
    let numbers: Vec<_> = "12.03 0.3 44.2 45 zzz".split_whitespace().collect();

    let x = numbers
        .par_iter()
        .map(|n| n.parse::<f32>())
        .filter_map(|n| n.ok());

    for n in x {
        println!("{:?}", n);
    }
}
Run Code Online (Sandbox Code Playgroud)
fn main() {
    let numbers: Vec<_> = "12.03 0.3 44.2 45 zzz".split_whitespace().collect();

    let x = numbers
        .par_iter()
        .map(|n| n.parse::<f32>())
        .filter_map(|n| n.ok());

    for n in x {
        println!("{:?}", n);
    }
}
Run Code Online (Sandbox Code Playgroud)

操场

rust rayon

4
推荐指数
1
解决办法
674
查看次数

使用 Hyper 同时获取多个 URL

我正在尝试调整Hyper basic 客户端示例以同时获取多个 URL。

这是我目前拥有的代码:

extern crate futures;
extern crate hyper;
extern crate tokio_core;

use std::io::{self, Write};
use std::iter;
use futures::{Future, Stream};
use hyper::Client;
use tokio_core::reactor::Core;

fn get_url() {
    let mut core = Core::new().unwrap();
    let client = Client::new(&core.handle());
    let uris: Vec<_> = iter::repeat("http://httpbin.org/ip".parse().unwrap()).take(50).collect();
    for uri in uris {
        let work = client.get(uri).and_then(|res| {
            println!("Response: {}", res.status());

            res.body().for_each(|chunk| {
                io::stdout()
                    .write_all(&chunk)
                    .map_err(From::from)
            })
        });
        core.run(work).unwrap();
    }
}

fn main() {
    get_url();
}
Run Code Online (Sandbox Code Playgroud)

它似乎没有同时进行(需要很长时间才能完成),我是否以错误的方式将工作交给了核心?

rust hyper rust-tokio

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

在 Excel 中正确呈现 Flask 生成的 CSV 文件

这是 Flask 视图的一个最小示例,它生成 CSV (python 2.7)。

\n\n
# -*- coding: utf-8 -*-\n\nimport csv\nimport StringIO\n\nfrom flask import Flask, Response\n\napp = Flask(__name__)\n\n\n@app.route('/example.csv')\ndef example_csv():\n    f = StringIO.StringIO()\n    writer = csv.writer(f)\n    writer.writerow(['Header 1', 'Header 2', 'Header 3'])\n    writer.writerows([unicode(_).encode('utf-8') for _ in row] for row in (['1', '2', '3'], \n                                                                           ['a', 'b', 'c'],\n                                                                           [u'\xc2\xa3', u'\xe2\x82\xac', u'\xc2\xa5']))\n    response = Response(f.getvalue(), mimetype='text/csv')\n    response.headers['Content-Disposition'] = u'attachment; filename=example.csv'\n    return response\n\n\nif __name__ == '__main__':\n     app.run(debug=True)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 Excel 中打开给出:

\n\n
Header 1    Header 2    Header 3\n1   2   3\na   b   c\n\xc3\x82\xc2\xa3 …
Run Code Online (Sandbox Code Playgroud)

python csv excel flask

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

XML文件上的Regex :: captures_iter比预期的要慢

我的第一个轻微的Rust项目之一涉及在大型XML文件上运行正则表达式:

extern crate regex;

use regex::Regex;
use std::fs::File;
use std::io::Read;

fn main() {
    let filename = "data.xml";
    let mut f = File::open(filename).expect("file not found");

    let mut contents = String::new();
    f.read_to_string(&mut contents)
        .expect("something went wrong reading the file");

    let re = Regex::new("url=\"(?P<url>.+?)\"").unwrap();
    let urls: Vec<&str> = re.captures_iter(&contents)
        .map(|c| c.name("url").unwrap().as_str())
        .collect();

    println!("{}", urls.len());
}
Run Code Online (Sandbox Code Playgroud)

我确信我做的事情非常低效:

time ./target/release/hello_cargo 144408 ./target/release/hello_cargo
1.60s user
0.03s system
99% cpu
1.643 total 
Run Code Online (Sandbox Code Playgroud)

99%的CPU使用率是由系统引起的,这似乎是不寻常的.

Python 2.7在不到一秒的时间内完成同样的工作:

import re 
data = open('data.xml').read()
urls = set(re.findall('url="(.+?)"', data))
print len(urls)
Run Code Online (Sandbox Code Playgroud)

使用 …

regex rust

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