73847


1つのPythonスクリプトを使って、違うコマンドライン引数を持たせて、複数回同時に(並行して)実行したいと思っています。

**my_script.pyの中身**

[code]

    import sys
    import numpy as np
    def func_long(v):
       ret = ***(v) # 時間がかかる処理
       return ret
    
    load_np_name = sys.argv[1]
    v = np.load(load_np_name)
    ret = func_long(v)
    save_np_name = load_np_name.replace('inp','out')
    np.save(save_np_name, ret)
    
[/code]

**terminal 1での実行内容**

[code]

    $ python3 my_script.py inp1.npy
    
[/code]

**terminal 2での実行内容**

[code]

    $ python3 my_script.py inp2.npy
    
[/code]

この時、terminal1とterminal2はほとんど同時に処理を開始しています。また実際はfor文で`np.save()`が複数回走っていたり、保存したいnumpy変数のサイズが大きくて`np.save()`に時間がかかったりするため、場合によっては`np.save()`のタイミングがかぶることもあると思います。

このような場合、terminal1で動かしている内容とterminal2で動かしている内容が混線してしまう恐れはありますでしょうか？  
今まではないと思っていたのですが、保存された.npyの値に少し違和感を持ち、もしかすると混線することはあるのだろうかと不安に思い、質問致しました。よろしくお願い致します。


CC BY-SA 4.0
2021-02-07T10:06:25.847
73845
2021-02-08T03:19:28.667
2021-02-08T03:19:28.667
3060
30785
question
python python3
Pythonで同じ関数を同時実行すると混線することはあるか？


出力先のファイル名が異なっていれば問題ないはずです。同じ場合は排他制御が必要となります。


CC BY-SA 4.0
2021-02-07T10:50:59.173
73847
2021-02-07T10:50:59.173
39819
73845
answer


入力されているファイルは`inp1.npy`と`inp2.npy`、出力されているファイルは`out1.npy`と`out2.npy`で、「ファイルの読み書き」に関しては、@merinoさんが回答されているように、何らバッティングしていないので、問題ありません。

また、「混線」というのは、ファイルのことではなく、「`my_script.py`の実行過程」に何らかの相互影響が発生しているのではないかと懸念されているのではないかと思いますが、そもそも、  
`$ python3 my_script.py inp1.npy`と  
`$ python3 my_script.py inp2.npy`は  
**実行プロセスが異なる**
ので、たとえ実行されているPythonスクリプトが元は同じ`my_script.py`であっても別々のメモリー空間で動いているので、互いに影響することはないでしょう。

psコマンドなどで見てみても、webサーバーなどでは同時にいくつものwwwプロセスが同時進行で動いています。そういう場合に互いに影響があるようなものだと困りますね。


CC BY-SA 4.0
2021-02-07T11:51:50.537
73849
2021-02-07T11:51:50.537
7290
73845
answer