1. alt
Changes in tags
Changes in body
Source | HTML | Preview
@@ -21,11 +21,10 @@
こういったイテレータ呼ばれる関数はpythonでも使われる基礎的な文法ですがsimpyで頻出する文法でもあります。
#simpyの基本的な文法(ここから本番)
simpyの一番簡単なコードは以下のようになります。
```python:practice.py
-
import simpy
def myrun(env):
while True:
print(env.now)
@@ -35,41 +34,40 @@
env.process(myrun(env))
env.run(until=10) # 0 2 4 6 8
```
まず
-```
+```py
import simpy
```
でsimpyをインポートします。
そのあとにイテレータmyrun()を定義しておきます。(あとで詳しく説明します)
次に
-```
+```py
env = simpy.Environment()
```
でsimpyの環境を作成します。今後このenvとおいた環境のプロセスにイテレータを追加してシミュレートすることになります。つまり今回の場合では先ほどテキトーに説明したイテレータmyrunをこのenv環境のプロセスに追加してenv.run関数でシミュレーションします。myrunは無限ループですが内部でenv環境の時刻を表示してからそのenv環境の2単位時間分(何を単位時間とするかは任意)の時間を待つイテレータです。(つまり2単位時間分そのenv環境からタイムアウトをします。)また、yield env.timeout(1)だと1単位時間分待つのでenv環境が1単位時間分進む毎に呼ばれることになるわけです。そして
-```
+```py
env.process(myrun(env))
```
でenv環境にプロセスを追加して
-```
+```py
env.run(until=10)
```
で10単位時間分だけenv環境の時間を進めます。ここでもしmyrun関数が
-```
+```py
def myrun(env):
print(env.now)
yield env.timeout(2)
-
```
だとすると、一度だけ実行してすぐに関数を抜けるのでイテレータとしてのエラーを吐いて関数の役目は終わります。つまりenv.run()の結果は0だけ表示されて終わります。また、untilを設定しないと無限に計算してくれます。しかしすべてのイテレータがエラーをはいて止まってくれていればenv.run()は無限に計算せずにすべてがエラーをはいたときに止まってくれます。
簡単なsimpyの基本動作はこれですべてです。
# 次回予告