マルチプロセスでのプロセス間でのデータの共有をためしてみました。
今回はPythonで作ったプログラムとC#で作ったプログラムを並列で動かし、共有ファイルを使ってデータのやり取りを試してみました。
PythonとC#の両方のコード資産を同時に使いたいときに参考になるかと思います。
<Python側の動作の流れ>
example.txtというテキストファイルに、文字列を書き込み、その後、無限ループでexample.txtの内容読み込み、標準出力などに出力する。
<C#側の動作の流れ>
example.txtに指定した文字列を書き込む。
<成功した場合>
pythonで実行しているexample.txtの標準出力への出力内容が途中から書き換わる。
>Pythonのプログラムは以下の通りです。
import mmap
f = open('example.txt', 'w')
f.write('555')
f.close()
with open("example.txt", "r+b") as f:
mm = mmap.mmap(f.fileno(), 0)
while True:
mm.seek(0)
mode=mm.readline()
print(mode)
>C#で製作した画面は以下の通りです。
>C#のプログラムは以下の通りです。
button1_Clickが追加したコードです。
他は自動生成される内容やおまじない。
Form.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace TestSharedFileWithPython
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string filepath = "example.txtの絶対パス";
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); // .Net CoreではShift-JISを.NET Frameworkと同じコードでは使えないので、このコードが必要。
try
{
Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
//ファイルをオープンする
using (FileStream fs = new FileStream(filepath,
FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
using (StreamWriter sw = new StreamWriter(fs, sjisEnc))
{
sw.Write(textBox1.Text);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
>スタートアッププロジェクトの設定
ソリューションエクスプローラ上のソリューションを右クリックして表示されるコンテキストメニュー内に"スタートアッププロジェクトの設定"
という項目があるので、
そこでマルチスタートアッププロジェクトを選択し、
並列して実行したいPythonとC#のプロジェクトのアクションを"開始"に設定してOKボタンを押してください。
この設定をした後でデバックの実行を開始すれば、並列してPythonとC#のプロジェクトが実行されます。
>実行結果
実行直後のPythonプログラムの出力は以下の通り。
並列起動しているC#のプログラムでtttと書き込むと、
Pythonプログラムの出力内容が書き換わります。
今回は以上になります。
参照リンク
基本的な所ですが、 button1_ClickとClick eventとのつなげ方は以下が参考になります。
デザイナー上で配置したボタンをクリックすれば元になるbutton1_Clickは自動で生成されますが念のため。
以下はその他の参照リンク
開発環境: Visual Studio Community 2019
OS: Windows 10 Pro 64bit バージョン1909
使用言語:Python3.7 (64bit), C#
Python 16.10.21111.19
Python - Conda サポート 16.10.21111.19
Python - Django サポート 16.10.21111.19
Python - プロファイル サポート 16.10.21111.19
.NET Core 3.1
パソコン性能: CPU Intel Core i5-4310M 2.70GHz, メモリ: 8GB
Visual StudioでPythonのライブラリを追加する方法は以下が参考になります。
*このページで紹介されているのはあくまでサンプルプログラムで、実際に製品のコードを作成される場合は適切なエラー処理などを実装するようにお願いします。また、動作環境によっては想定した動きにならない場合があります。適宜、実行環境に合わせてプログラムの内容を最適化ください。
ランキングに参加してます。
よかったらクリックをお願いします。