Cat
собственно, да
Vladimir
Понято, вот это жист, а дорожки тоже можно несколько загрузить?
Денис
да кстати у меня тайтл на аглицком
Cat
тоже
Cat
Sergey
Sergey
Есть ещё тайтлы на немецком и украинском, если уже совсем интересно :D
Cat
Vladimir
Денис
Cat
Vladimir
Зрада
Sergey
Anton
Cat
Anton
Anton
Cat
прости, у меня только в этом году начнётся английский в школе
Anton
Anton
Ну а так, дерзай
VCL
Привет всем. У меня небольшие сложности в работе с tokio + udp. Пожалуйста помогите :)
1. Нужно ли делать один большой кодек для всего или разбить всё это на sub кодеки? Основная проблема в том, что я в начале сделал пару разных кодеков, которые все хендлят определённые типы пакетов и планировал просто использовать их как wrapper вокруг сокета․ Но UdpFramed кушает мой сокет.
Получается я не могу делать что-то подобное
firstCodecFramed.for_each(|data, addr| {
let secondCodecFramed = UdpFramed::new(firstCodecFramed.get_ref(), secondCodec);
///
}
Где я неправильно думаю? ։)
2.Как правильно отправлять пакеты через UdpSocket? Я сейчас сделал как-то так.
let (packet_sender, packet_sender_receiver) = futures::sync::mpsc::channel(10);
let (sink, stream) = self.framed.split();
Box::new(
stream
.for_each(move |(data, addr)| {
Cacher::process_request(packet_sender.clone(), &data.freeze(), addr)
})
.map_err(|e| {
error!("Stream error inside for_each {}", e);
})
.join(packet_sender_receiver.forward(sink.sink_map_err(|e| {
error!("Sink error inside receiver {}", e);
})))
.map(|_| {}),
)
То есть у меня есть mpsc channel для отправки данных в сокет в дальнейшем все данные сливаются в него, но хочется так же уметь отправить пакет и отреагировать на его получение с помощью and_then.
Что-то в псевдокоде
socket.send(someData)
.and_then(socket.receiveData())
Денис
ы, наш клиент
Денис
Привет всем. У меня небольшие сложности в работе с tokio + udp. Пожалуйста помогите :)
1. Нужно ли делать один большой кодек для всего или разбить всё это на sub кодеки? Основная проблема в том, что я в начале сделал пару разных кодеков, которые все хендлят определённые типы пакетов и планировал просто использовать их как wrapper вокруг сокета․ Но UdpFramed кушает мой сокет.
Получается я не могу делать что-то подобное
firstCodecFramed.for_each(|data, addr| {
let secondCodecFramed = UdpFramed::new(firstCodecFramed.get_ref(), secondCodec);
///
}
Где я неправильно думаю? ։)
2.Как правильно отправлять пакеты через UdpSocket? Я сейчас сделал как-то так.
let (packet_sender, packet_sender_receiver) = futures::sync::mpsc::channel(10);
let (sink, stream) = self.framed.split();
Box::new(
stream
.for_each(move |(data, addr)| {
Cacher::process_request(packet_sender.clone(), &data.freeze(), addr)
})
.map_err(|e| {
error!("Stream error inside for_each {}", e);
})
.join(packet_sender_receiver.forward(sink.sink_map_err(|e| {
error!("Sink error inside receiver {}", e);
})))
.map(|_| {}),
)
То есть у меня есть mpsc channel для отправки данных в сокет в дальнейшем все данные сливаются в него, но хочется так же уметь отправить пакет и отреагировать на его получение с помощью and_then.
Что-то в псевдокоде
socket.send(someData)
.and_then(socket.receiveData())
https://t.me/tokio_rust
Alexander
вопрос: причина вопроса: надо быстро накидать, делать лучше - лень.
вопрос: lazy_static можно как-то с mut ? через Mutex?
Alexander
9 | / lazy_static! {
10 | | static ref MODEL: Arc<Mutex<Model>> = { Arc::new(Mutex::new(Model::load("2.model.pb", 8249.59078866, 714953.99218568))) };
11 | | }
| |_^ `*mut tensorflow_sys::TF_Session` cannot be sent between threads safely
|
= help: within `ml::Model`, the trait `std::marker::Send` is not implemented for `*mut tensorflow_sys::TF_Session`
= note: required because it appears within the type `tensorflow::Session`
= note: required because it appears within the type `ml::Model`
= note: required because of the requirements on the impl of `std::marker::Send` for `std::sync::Mutex<ml::Model>`
= note: required because of the requirements on the impl of `std::marker::Sync` for `std::sync::Arc<std::sync::Mutex<ml::Model>>`
= note: required by `lazy_static::lazy::Lazy`
Alexander
mutex покрывает sync, а что покрывает send, я думал arc. можно его как-то изобразить для структуры что не умеет?
саша
саша
Правило вроде такое, что если T: Sync, то &T: Send
Alexander
Mutex<&'static Model> ?
саша
Alexander
что-то ему пофиг:
9 | / lazy_static! {
10 | | static ref MODEL: Mutex<&'static Model> = { Mutex::new(&Model::load("2.model.pb", 8249.59078866, 714953.99218568)) };
11 | | }
| |_^ *mut tensorflow_sys::TF_Session cannot be shared between threads safely
|
= help: within ml::Model, the trait std::marker::Sync is not implemented for *mut tensorflow_sys::TF_Session
саша
а ещё можно имплементировать сенд в ансейф, если он не библиотечный
Alexander
да у меня вообще тредов нет
саша
саша
А мутекс зачем?
Alexander
чтоб на sync не ругалось
Alexander
9 | / lazy_static! {
10 | | static ref MODEL: &'static Model = { Model::load("2.model.pb", 8249.59078866, 714953.99218568) };
11 | | }
| |_^ *mut tensorflow_sys::TF_Session cannot be shared between threads safely
|
= help: within &'static ml::Model, the trait std::marker::Sync is not implemented for *mut tensorflow_sys::TF_Session
саша
сделай тред локал
саша
статики по дефолту шаред между потоками же
Alexander
сорян, что сделать?
Alexander
я уже сдался - и потащил параметр из main вглубь
саша
во первых, если это не должно быть статикой, то не делай статикой
саша
вся статика должна быть Send + Sync насколько я понимаю
саша
есть макрос thread_local!, в нём можно задать локальные для треда переменные
Alexander
ну я хотел "по-быстрому", я понял - делаю нормально уже :) спасибо.
丰
Я его 4ый раз вижу
Sergey
чойта? выглядит стрёмно
https://rustrush.ru
Roma
Alexey
я думаю сначала нужно ответить на вопрос как ты хочешь поступить если встретишь пустой Option
Alexey
filter_map?
պլհկ
filter/filter_map
Денис
Маjко
Vladimir
Это означает что они ничего не делали
Маjко
Ооо
Маjко
Там в компилер заебатых диагностик подвезли
Маjко
Loyd
Маjко
Раньше не было
Loyd
Ты про two versions?
Маjко
Писал просто Expected А, Found A
Loyd
Тыщу лет как вижу
Loyd
(хотя может из-за того, что на найтли всё время)
պլհկ
two different versions не было
պլհկ
ну т.е. когда-то не было, я на такую ошибку не налетал уже долго
Loyd
Ну, судя по blam-у точно больше полугода этой штуке
Loyd
-__-
Мог и без "perhaps", а сказать точно, какие версии и откуда взялись.
Cat
Cat
никакого авантюризма
Loyd
Это да. Но вангую, что пришлось бы хорошенько через кишки протащить эту инфу
Маjко
Я давно такие ошибки не видел, по ходу)
Loyd
Ну не настолько же давно)
Маjко
-__-
Cuno