我有一个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)
如何在不删除和重新创建表的情况下使此索引生效?
我试图使用多处理池来运行一组进程,每个进程都运行一个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套接字模块的行为有所不同. …
我的板条箱的 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”设为默认值?
我需要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
我认为这是因为它变得困惑,因为我已经取代了课程,我觉得我在做一些愚蠢的事情,任何想法?提前致谢.
我具有用于流文本文件的此功能:
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编写器,但是效率似乎很低。有没有更好的办法?
我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) 这是脚本的精简版本,导致内存使用量持续增加,我看到它在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没有我能找到的版本号.
提前感谢您的任何答案.
似乎get.k8s.io是部署Kubernetes集群的推荐方法,但是此脚本不支持Digital Ocean。
是否有其他方法可以轻松在我错过的Digital Ocean上建立集群?
谢谢
异步示例很有用,但作为Rust和Tokio的新手,我正在努力研究如何一次执行N个请求,使用向量中的URL,并为每个URL创建响应HTML的迭代器作为字符串.
怎么可以这样做?
我正在使用 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)
我正在尝试调整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)
它似乎没有同时进行(需要很长时间才能完成),我是否以错误的方式将工作交给了核心?
这是 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)\nRun Code Online (Sandbox Code Playgroud)\n\n在 Excel 中打开给出:
\n\nHeader 1 Header 2 Header 3\n1 2 3\na b c\n\xc3\x82\xc2\xa3 …Run Code Online (Sandbox Code Playgroud) 我的第一个轻微的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)
使用 …
python ×6
rust ×6
csv ×2
flask ×2
gevent ×2
rayon ×2
rust-tokio ×2
excel ×1
hyper ×1
indexing ×1
kubernetes ×1
regex ×1
reqwest ×1
rust-cargo ×1
sqlalchemy ×1
streaming ×1
wasm-bindgen ×1