Pythonによるイベントソーシングへの挑戦と現状に対する考察 / Challenging Event Sourcing with Python and Reflections on the Current State
「state 更新 反映されない」を検索するまで Reactにまだ慣れていない段階で開発をしているとuseStateの問題に詰まってこのような検索をする方は多いかなと思います。 私もその一人で、公式のチュートリアルを一通りやったにも関わらずこの問題に詰まってしまったのは忸怩たる思いでございます。 「useStateで定義した値はset関数で更新できて、useStateはフックなので実行すると画面が更新される」というのはまずReactを勉強する最初の段階で理解するでしょう。 そこで、言われた通りにuseStateで値を定義し、ユーザーの操作によって画面を更新させるコードを書きます。 import { useState } from 'react'; export default function Counter() { const [number, setNumber] = useState
基本的な実装 VBAでの基本的なソケット通信コードにエラーハンドリングと非同期通信を追加したサンプルです。このサンプルはWinsockではなくWinHTTPを使用して非同期通信を実現しています。エラーハンドリングや非同期通信には適切な機能を追加することが必要です。 Option Explicit ' WinHTTP 非同期通信用の関数宣言 Declare PtrSafe Function WinHttpOpen Lib "winhttp.dll" (ByVal pwszUserAgent As Long, ByVal dwAccessType As Long, ByVal pwszProxyName As Long, ByVal pwszProxyBypass As Long, ByVal dwFlags As Long) As Long Declare PtrSafe Function
非同期マルチスレッドフレームワーク「Pingora」をオープンソース化 Cloudflare:ゲートウェイやロードバランサー構築に向くカスタマイズ可能なAPI Cloudflareは、RustフレームワークPingoraのオープンソース化を発表した。Pingoraは、Cloudflareが開発したHTTPプロキシサービスの構築を支援するRustの非同期マルチスレッドフレームワークだ。
想定読者 非同期処理がいまいちイメージできないという人 非同期処理って具体的にどう書くの?という人 Pythonの基本文法はなんとなく知っているよという人(←具体的な実装方法を知りたい人のみ) Pythonがパソコンにインストールされている(←動作確認したい人のみ) 非同期処理、同期処理とは? まずは結論から。 非同期処理とは、 あるタスクが終了するのを待っている間、別のタスクを実行すること。 同期処理とは、 処理を順番に実行していくこと。 以下、詳しく書いて行きます。 非同期処理のイメージ 非同期処理のイメージは、 家事を並行してこなすことに似ています。 例えば、 ご飯を炊いている間、炊飯器の前でただ炊けるのを待っていては、時間がもったいないです。 炊けるまでの1時間の間に、他のメニューを作ったり、部屋の掃除をした方が効率的です。 このように、 タスクA(ご飯を炊く)が完了するまでの間、
こんにちは、commmuneでデータサイエンティストをしているひぐです。 人間が苦手なマルチタスクをLLMに任せたら、効果的に処理してくれるのではないか?というモチベーションのもと、Pythonの非同期処理を使って並列かつストリーミングでChatGPTの回答を出力するアプリを作りました🤖 例えば下記は、ある課題を入力すると、深さ・広さ・構造・時間軸という異なる観点で解像度を上げてくれるアプリケーションです。 アプリに関する登壇資料↓ このアプリ作成にあたってPythonの非同期処理を勉強したところ、最初は多くの専門用語(コルーチン、イベントループ...)や独自の記法により、全体像をつかむのに苦戦しました。一方で、学んでみると予想以上にシンプルな記法で実装できること、そして応用範囲が広くて便利だと理解しました。 この記事では、そんな少し取っつきにくけど便利なPythonの非同期処理にフォー
以下に非同期シリアル通信の概要を示します。 メインプログラムとは別にシリアル通信用にスレッドを用意して、 内部で通信イベントを待たせます。イベントの通知は、 Windowsが提供するイベントオブジェクトを介して行われます。 イベントはWaitForMultipleObjects()関数で待ち合わせができます。 具体的には、必要な数イベントハンドルを用意して、 WaitForMultipleObjects関数を呼び出すことで待ち状態に入ります。 いずれかのイベントハンドルがセットされると、WaitForMultipleObjects関数は、 セットされたイベントハンドルの番号を返して、待ち状態から戻ってきます。 イベントハンドルは手動でセットすることもできますが、 送信完了時や、データ受信時にOSにセットしてもらうこともできます。 受信データは、あらかじめシリアル通信クラスに呼び出される関数
ライブラリを使わない非同期処理(後編) 先日、前編 を書きました。今日はその後編です。Executor や Schedular の実装を見ていきます。 Executor があると、非同期処理を完了させるために開発者が poll を何度も呼び出さなくても良くなります。 詳解に入る前に概念的な説明 非同期処理とは本質的に何でしょうか。非同期処理がない世界では、タスクの到着に対してその場で実行し、それが完了するまで後続のタスクは実行できません。もしタスクの中に長い時間がかかる IO が含まれていたら、その IO 待ちの間は後続のタスクが実行できません。そこで生まれたアイデアが、IO の待ち時間は別のタスクをするという考えです。 IO の完了を通知する仕組み IO の待ち時間は別のタスクをするためにはどうすればよいでしょうか。 よくあるのは、IO 完了時に完了後の処理を行うように登録だけしてしまう
この記事は Rust アドベントカレンダー 5 日目の記事です。OGP 画像は間に合わなさそうな画像です。 Rust そのものには非同期処理の仕組み自体はありますが、非同期のタスク群をスケジューリングして実行する仕組みがありません。これはユーザーもしくはライブラリに任されています。例えば代表的なライブラリである tokio は schadular や executor を提供します。 非同期処理は関係してくる分野が多くさまざまなレイヤーが重なるのでとても難しいと思っています。そこで非同期処理を深く理解するために tokio を使わなければレイヤーをひとつ剥がせて理解が深まると思いました。そこで tokio を使わずに Rust の公式 crate だけで非同期処理を実現してみましょう。 ちなみに前編とついているのはアドベントカレンダーに間に合わせるために志半ばで切り上げたからです。という
TechFeed Experts Night Pick up Rustの非同期デバッグツールを使いこなせ! ~TechFeed Experts Night#9講演より 本記事は、2022年11月に開催された「TechFeed Experts Night#9 〜 Rust/WebAssemblyの「いま」を探る」のセッション書き起こし記事「Rustの非同期デバッグツールを使いこなせ! by κeen」を転載したものです。オリジナルはTechFeedをご覧ください。 「Rustの非同期デバッグツールを使いこなせ!」というタイトルで発表していきたいと思います。 κeenと申します。Twitterなどで騒がしくしている人なので、見たことある人も多いのではないかなと思います。仕事は、Idein Incという会社にいて、しばらくRustを書いている期間がありました。 今日は非同期の話をしていきますが、
この記事はWano Group Advent Calendar2022 16日目の記事です。 今回はRustの非同期プログラミング(スレッドやasync)周りで私が知っている事を2022年版としてまとめようと思います。 Rustのバージョンは記事執筆時点で最新の1.65.0を想定しています。 普通のスレッドで非同期処理をする時のあれこれ まずはOSにお願いして作ってもらう普通のスレッドについてです。 スレッドの作り方 Rustは標準ライブラリ(std)にスレッドを取り扱う為のAPI(std::thread)があります。 fn main() { let handle = std::thread::spawn(|| { println!("Hello Thread!"); "🍣".to_string() + "🍺" }); let s = handle.join().unwrap(); p
はじめに 今回の記事では、JavaScriptの学習における最大の鬼門の一つ「非同期処理」を、任天堂のゲーム『スーパーマリオ』を具体例に、初心者でもわかりやすく解説する。 対象とする読者 プログラミング初心者 非同期処理が全くわからない初心者 タイトルで気になったひと 同期処理と非同期処理 まずは、「同期」と「非同期」のそれぞれの定義や違いについて解説する。同期処理とは、コードを上から下まで順番に処理することを意味する。一方で、非同期処理はある処理が終わるのを待たずに、別の処理を実行することを意味する。 参考までに、「分かりそう」で「分からない」でも「わかった」気になれるIT用語辞典では、以下のように説明されている。 非同期(読:ヒドウキ 英:asynchronous)とは相手との足並みを揃えないこと。あるいは、相手の反応を待たないで、ひょいひょい行動すること。 同期は何かと何かを「同じに
アプリケーション開発者はシグネチャを見て、このルールに従っていると仮定します。例えば、ライブラリに同期メソッドがあれば、利用者側はスレッドプールを使って安全に並列化できると仮定できます。しかし、非同期であれば、スレッドを新しく生成するのは無駄で、シングルスレッドのループの中で非同期メソッドを実行するほうがいいと判断するでしょう。 このように考えると、さらに基本的な原則が生まれます。 “ライブラリ内でTask.Runを使わない” スレッド、特にスレッドプールのスレッドはグローバルに共有されているリソースで、アプリケーション開発者に属しています。ライブラリの作者はTask.Runを使ったり、スレッドを作るメソッドを作成するべきではありません。どのようなタイミングでスレッドを追加するか決めるのはアプリケーション開発者の権利と責任です。 次のコードは典型的なアンチパターンです。 public st
最近のお仕事で、C#の非同期処理の書き方が分からずに、溶岩地帯に自爆していくコードを沢山みるようになったので、ケースとして日常風の記事にしてみました。 どんな風にハマってしまい、どうやって解決するのかが分かると思います。 結論 先に書いておきます。 Task.Run()を使ってはいけません Task.Result, Task.Wait()を使ってはいけません Threadクラスを使ってはいけません async-await構文だけを使って書きます async voidにするのは特殊な場合だけです がんばれー、わかってしまえば難しくない! 補足: もしあなたがJavaScriptで非同期処理を書いた事があるなら、その知識をそのまま生かせます。 JavaScriptではTaskの代わりにPromiseを使いますが、Promiseには上記1,2,3は存在しません。しかし、それで困ることはありません
C#(とVisual Basic)が切り開いた非同期処理の新たな世界。そこにはまだ課題もある。これを克服する方法として、前後編の後編となる今回は「非同期シーケンス」がC# 7でどうなるかを見てみよう。 ← 前回 連載 INDEX 次回 → 前編の冒頭で、「要望はあるのに現状の非同期メソッドではできないこと」として以下の2つがあると説明した。 (1)戻り値の型にvoid、Task、Task<T>しか認めていない (2)非同期シーケンス(awaitとyield returnの混在)に対応していない 前編では、(1)非同期メソッドの戻り値の問題と、C# 7~将来のC#で検討されている解決策について説明した。後編となる今回は、(2)非同期シーケンスについて話していこう。 非同期シーケンス C# 5.0で非同期メソッドが導入されたとき以来ずっと要望として挙がっていることの一つに、非同期シーケンス(a
await中の非同期処理の例外が拾えない? @itのサイトでC#でasync/awaitによる非同期処理中に発生した例外処理の勉強をしてまして、なんでもasync/awaitを使用すると通常の同期コードと同じような書き方で例外を拾えるということです。 @itのサイトを参考に以下のようなコードを書いてみました。 private async void button1_Click(object sender, EventArgs e) { try { button1.Enabled = false; await Task.Run(() => { System.Threading.Thread.Sleep(1000); throw new Exception("Exception!"); }); } catch(Exception ex) { MessageBox.Show(ex.Message)
改版履歴 ReactiveProperty v5.6.0 に合わせてアップデート 本文 ということで書いていきましょう。 といっても二度押し防止系は AsyncReactiveCommand 使うと楽。以上です。 例えば非同期処理が終わるまで押せないボタンを実現したい場合は以下のような ViewModel になります。 using Reactive.Bindings; using System.ComponentModel; using System.Threading.Tasks; namespace DoubleClickApp { public class MainWindowViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public Asy
この記事はRust Advent Calendar 2022 - Qiitaの13日目の記事です。 はじめに Rustの非同期I/Oライブラリ tokio の解説記事になります。初めに概要説明をします。その後でちょっとしたソースコードを見せながら解説をしていきます。理論より実践、実際にどう書けば良いのか知りたい人向けの記事になります。 tokioはライブラリの一つに過ぎませんが、hyper、actix-webなどのWebフレームワーク、Denoのイベントループ、Solanaのツールなどで利用されており、デファクトスタンダード的な重要なライブラリになっています。 またDiscordはtokioのスポンサーをしており、GoからRust(Tokio)で書き換えた話は小説を一冊読み終えたかのようなブラボーな興奮がありました。 ちなみに、tokioのネーミングは開発者のCarl Lercheが東京観
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く