各着信接続を同時に処理する Python Asyncio を利用する Python3.5 で記述されたネットワーク アプリケーションがあります。
すべての同時接続で、接続されたクライアントのデータをリストに保存したいと考えています。2 つのクライアントが同時に接続すると (可能性はあります)、両方のタスクが同時にリストに書き込もうとするため、確実に問題が発生するのではないかと心配しています。どうすればこれを解決できますか?
各着信接続を同時に処理する Python Asyncio を利用する Python3.5 で記述されたネットワーク アプリケーションがあります。
すべての同時接続で、接続されたクライアントのデータをリストに保存したいと考えています。2 つのクライアントが同時に接続すると (可能性はあります)、両方のタスクが同時にリストに書き込もうとするため、確実に問題が発生するのではないかと心配しています。どうすればこれを解決できますか?
asyncio は、yield ポイント(await
式) でのみコンテキスト切り替えを行うため、2 つの並列タスクが同時に実行されることはありません。
ただし、競合状態が引き続き発生する可能性がある場合 (具体的なコード構造によって異なります)、asyncio 同期プリミティブとキューを使用できます。