0
私はPythonとSimpyを使い始めた初心者です。私は 2つのプロセスの間の通信チャネルを同期させたいと思います。例えば、私が持っているしたいと思います:Simpyの同期通信チャネル
channel = ...
def writer(env):
for i in range(2):
yield env.timeout(0.75)
yield channel.put(i)
print("produced {} at time {}".format(i, env.now))
def reader(env):
while (True):
yield env.timeout(1.2)
i = yield channel.get()
print("consumed {} at time {}".format(i, env.now))
env = simpy.Environment()
env.process(writer(env))
env.process(reader(env))
env.run()
それは結果として与える必要があります。
produced 0 at time 1.2
consumed 0 at time 1.2
produced 1 at time 2.4
consumed 1 at time 2.4
私は/チャネルの定義に使用する何をすべき?
私は(上から若干異なる)を取得するよりも、私はStore
を使用する場合:
import simpy
env = simpy.Environment()
channel = simpy.Store(env)
def writer():
for i in range(2):
yield env.timeout(0.75)
yield channel.put(i)
print("produced {} at time {}".format(i, env.now))
def reader():
while (True):
yield env.timeout(1.2)
i = yield channel.get()
print("consumed {} at time {}".format(i, env.now))
env.process(writer())
env.process(reader())
env.run()
を、出力は次のようになります。
produced 0 at time 0.75
consumed 0 at time 1.2
produced 1 at time 1.5
consumed 1 at time 2.4
をしかし、前述したように、私が取得する必要があります。ライターは、読み取り準備が整うまで待つ必要があります。
お返事ありがとうございました。しかし、読者と作家のプロセスはお互いに待つべきです。これ以上は起こりませんよね?私は、読者が読む準備が整うまで待つべきだが、作家は続けるだろうと思う。 –
ありがとうございます。基本的にこれは私が必要なものです。私は今自分のリソースタイプを書くことを考えます。しかし、まずSimpyとPythonについて一般的にもっと知る必要があります。私が必要とするリソースタイプに関する提案があれば、それは高く評価されます。 –
PythonとSimPyに慣れ親しんでいると感じるまで、これを使い続けます。次に、あなたが望むことをするStoreのサブクラスを作成します。また、すべてのSimPyドキュメントを読んでください。 ;-) –