- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建具有 PyO3 Python 解释器和 Py 对象的 Actix Actor。
问题是创建 python 解释器 actor 的正确方法是什么?
我认为错误是由静态定义的 Actor 特征引起的。 https://docs.rs/actix/0.7.4/actix/trait.Actor.html
有没有Actor或者Context有object需要life参数的方式?
rust 版本:nightly-2018-09-04,actix 版本:0.7.4
这是当前代码。
extern crate actix;
extern crate actix_web;
extern crate pyo3;
use actix::prelude::*;
use actix_web::{http, server, ws, App, HttpRequest, HttpResponse, Error};
use pyo3::{Python, GILGuard, PyList};
struct WsActor<'a> {
// addr: Addr<PyActor>,
gil: GILGuard,
python: Python<'a>,
pylist: &'a PyList,
}
impl<'a> Actor for WsActor<'a> {
type Context = ws::WebsocketContext<Self>;
}
fn attach_ws_actor(req: &HttpRequest<()>) -> Result<HttpResponse, Error> {
let gil = Python::acquire_gil();
let python = gil.python();
let pylist = PyList::empty(python);
let actor = WsActor {gil, python, pylist};
ws::start(req, actor)
}
fn main() {
let sys = actix::System::new("example");
server::new(move || {
App::new()
.resource("/ws/", |r| r.method(http::Method::GET).f(attach_ws_actor))
}).bind("0.0.0.0:9999")
.unwrap()
.start();
}
此代码无法编译并出现此错误。
error[E0478]: lifetime bound not satisfied
--> src/main.rs:15:10
|
15 | impl<'a> Actor for WsActor<'a> {
| ^^^^^
|
note: lifetime parameter instantiated with the lifetime 'a as defined on the impl at 15:6
--> src/main.rs:15:6
|
15 | impl<'a> Actor for WsActor<'a> {
| ^^
= note: but lifetime parameter must outlive the static lifetime
最佳答案
作为Nikolay说,你可以存储 Py<PyList>
WsActor
中的对象.恢复PyList
,您可以再次获取GIL并调用.as_ref(python)
AsPyRef
的方法|特征(Py<T>
实现)。示例如下:
extern crate actix;
extern crate actix_web;
extern crate pyo3;
use actix::prelude::*;
use actix_web::{http, server, ws, App, HttpRequest, HttpResponse, Error};
use pyo3::{Python, PyList, Py, AsPyRef};
struct WsActor {
// addr: Addr<PyActor>,
pylist: Py<PyList>,
}
impl Actor for WsActor {
type Context = ws::WebsocketContext<Self>;
}
impl StreamHandler<ws::Message, ws::ProtocolError> for WsActor {
fn handle(&mut self, _: ws::Message, _: &mut Self::Context) {
let gil = Python::acquire_gil();
let python = gil.python();
let list = self.pylist.as_ref(python);
println!("{}", list.len());
}
}
fn attach_ws_actor(req: &HttpRequest<()>) -> Result<HttpResponse, Error> {
let gil = Python::acquire_gil();
let python = gil.python();
let pylist = PyList::empty(python);
let actor = WsActor {
pylist: pylist.into()
};
ws::start(req, actor)
}
fn main() {
let sys = actix::System::new("example");
server::new(move || {
App::new()
.resource("/ws/", |r| r.method(http::Method::GET).f(attach_ws_actor))
}).bind("0.0.0.0:9999")
.unwrap()
.start();
}
关于python - actix Actor怎么会有PyO3 Python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52288565/
问题很简单:看代码。两个静态断言都通过了。我不希望第二个通过。这是错误还是正常行为? #include #include template class Temp, class Specializ
int Sequence::scoreDegeneracy() { cout const&) (in /usr/lib/libstdc++.so.6.0.13) ==17043== b
我已经测试了下面的代码,除了第 29 行之外,一切都按照我的预期进行。final.write(invrow) 实际上并没有写入文件。当我使用简单的 print invrow 时,它显示没有问题。我没有
我的项目中有很多类被单例访问,如下所示: _inline GUI_BS_Map* GUI_GetBS_Map() { static GUI_BS_Map obj; return &ob
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 6 年前。 Improve th
我针对我遇到的问题截取了几张屏幕截图。基本上,我对 vi 的习惯和期望是能够使用箭头键在文档中移动,并且仍然能够阅读文档的实际内容。 Here is a shot of vi editor as I
NSDateFormatter *timeFormatter = [[[NSDateFormatter alloc] init] autorelease]; [timeFormatter se
根据docs : The HTMLCanvasElement.toDataURL() method returns a data URI containing a representation of
我做了一个小函数,可以实际测量最大递归限制: def f(x): r = x try: r = f(x+1) except Exception as e:
我正在开发一个小型 silverlight 应用程序,该应用程序涉及在 javascript 和 silverlight 之间传递一些数据。我也在使用 silverlight 虚拟地球控件。 我遇到的
我在Chrome和Firefox中都试过了,浏览器好像没有问题。我的 CSS 是有效的,但是当我通过验证运行我的 HTML 时,它显示“元素链接上属性 rel 的错误值‘stylesheet’:字符串
如果我有一个类,其中的 ctor 设置为像这样的多重注入(inject): public Shogun(IEnumerable allWeapons) { this.allWeapons =
我现在正在使用 devise/omniauth。通过 facebook/twitter 注册后,我想重定向到一个名为“验证电子邮件”的页面,他们可以在其中验证他们的电子邮件地址是否正确。 我只是想让
我有两个相同的交易,在这种情况下发送相同数量的代币,导致实际消耗的气体不同(不是成本,而是显着差异)。 以下是 tx 哈希值: 0x2cbb4b35d87cabe1a7b7bcb562e4e046e9
如果我这样做: ExpiresActive On ExpiresDefault "access plus 30 days" 它没有正确设置 Expire header
我无法过滤我想要查看的特定软件包,因为 cpusettings 菜单呈灰色。 我正在使用 VisualVM 运行程序从 eclipse 运行我的应用程序。 最佳答案 采样过程中无法更改 CPU 设置。
在 http://www.gwtproject.org/doc/latest/DevGuideUiBinder.html 它指出要在 uiBinder 模板中使用小部件: they must be d
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我有下面的代码,但是,当我用 visual studio code 修改代码并在我的 Chrome 浏览器中运行它时,我在“热门产品”中看不到下拉菜单。部分。 但是,当我在此处 (stackoverf
我有两个类(class)联系人和群组 FirstName 和LastName 的组合必须是唯一的,并且可以为单个联系人添加多个地址。我如何在 Entity Framework 代码优先方法中做到这一点
我是一名优秀的程序员,十分优秀!