Size: a a a

Rust — русскоговорящее сообществo

2020 August 15

V

Vladimir in Rust — русскоговорящее сообществo
pl 🦑 hk
Таймер делается через таймаут. Это часть "жду ответа от всех"
ну если у него запросы, я думаю барьеры ему не нужны, он запросами регулирует момент когда нужно создавать новые ответы.
источник

V

Vladimir in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Такой вопрос
У меня есть несколько (не очень много) внешних сущностей (процессов, вебсокетов)
Мне нужно отправить в каждую информацию, получить ответ, потом повторить. Т. е. сначала я жду ответа от всех, и только потом начинаю снова посылать запросы, причём ответ жду с таймаутом.
Я не уверен, как это лучше сделать.
Можно порождать тред на каждого клиента. Можно вместо этого их спаунить в асинк-тасках, наверное? Но я не могу сходу придумать, как в Rust это сделать на них. Ещё есть actix с акторами, которые, вроде как, тоже подходят под проблему.
что делать с фьючами если таймаут райзнулся?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Vladimir
что делать с фьючами если таймаут райзнулся?
Канцеллить те, которые не успели, специальным образом обрабатывать этот кейс в логике, и продолжать выполнение
источник

БП

Бешеный Профессор... in Rust — русскоговорящее сообществo
Живе Беларусь! Слава Украине! Максима Каца в президенты! 😁
источник

JC

Julian =) Coffee in Rust — русскоговорящее сообществo
🌚
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Окей, другой момент
У меня есть заспауненный через токио процесс
https://docs.rs/tokio/0.2.22/tokio/process/struct.Child.html
Я хочу его сохранить и по запросу делать следующее:
1. Писать в него одну строку
2. Читать из него одну строку
Проблема в том, что
1. Постоянно приходится делать .unwrap() на .stdin и .stdout
2. Я не могу сделать BufReader, потому что для этого пришлось бы мувнуть поле из процесса
Наверное, я могу сделать child.stdin.take(), child.stdout.take(), но не очень хочу, ощущение, что я что-нибудь так сломаю.
источник

a

antuan in Rust — русскоговорящее сообществo
приветствую. подучиваю на досуге раст, и немношк неодупляю
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ab9b148a0ff3dad92b53534f69dfeb91
ругается на "expected enum std::option::Option, found opaque type".

при этом нагугленная аналогия работает норм: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=420bc0db13aeee0f38f3217b1a73b989

буду благодарен за помощь\подсказку
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
antuan
приветствую. подучиваю на досуге раст, и немношк неодупляю
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ab9b148a0ff3dad92b53534f69dfeb91
ругается на "expected enum std::option::Option, found opaque type".

при этом нагугленная аналогия работает норм: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=420bc0db13aeee0f38f3217b1a73b989

буду благодарен за помощь\подсказку
Ты из filter_map возвращаешь футуру, а надо опшн
источник

a

antuan in Rust — русскоговорящее сообществo
допустим. но во втором варианте делается то же самое, нет?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
antuan
допустим. но во втором варианте делается то же самое, нет?
Во втором варианте мы применяем фильтрмап не на итератор, а на стрим
источник

Э

Эрик in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Окей, другой момент
У меня есть заспауненный через токио процесс
https://docs.rs/tokio/0.2.22/tokio/process/struct.Child.html
Я хочу его сохранить и по запросу делать следующее:
1. Писать в него одну строку
2. Читать из него одну строку
Проблема в том, что
1. Постоянно приходится делать .unwrap() на .stdin и .stdout
2. Я не могу сделать BufReader, потому что для этого пришлось бы мувнуть поле из процесса
Наверное, я могу сделать child.stdin.take(), child.stdout.take(), но не очень хочу, ощущение, что я что-нибудь так сломаю.
Ничего там не сломается.
источник

Э

Эрик in Rust — русскоговорящее сообществo
У процесса нет никаких impl Read, impl Write, чтобы там что-то сломалось.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Эрик
Ничего там не сломается.
А если дропнуть процесс, например, ему не нужно будет закрыть дескрипторы?
источник

Э

Эрик in Rust — русскоговорящее сообществo
К тому же, важные поля не помечают как pub.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Так он со своей стороны и закроет.
источник

Э

Эрик in Rust — русскоговорящее сообществo
И у тебя запись в его Stdin или чтение его Stdout вернёт ошибку.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Эрик
И у тебя запись в его Stdin или чтение его Stdout вернёт ошибку.
Логично
источник

a

antuan in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Во втором варианте мы применяем фильтрмап не на итератор, а на стрим
что будет тогда правильным вариантом? сделать отдельный вектор из футур, от него сделать join_all, и результат отфильтровать?
источник

Э

Эрик in Rust — русскоговорящее сообществo
antuan
что будет тогда правильным вариантом? сделать отдельный вектор из футур, от него сделать join_all, и результат отфильтровать?
into_stream
источник

a

antuan in Rust — русскоговорящее сообществo
Эрик
into_stream
пойду погуглю, что это такое и чего с этим делать :)
спасибо
источник