2016-04-29 153 views
4

我有一個python腳本,需要一段時間才能完成它的執行取決於傳遞的參數。所以如果我從兩個不同參數的終端運行它們,他們是否得到他們自己的代碼版本?我看不到兩個.pyc正在生成的文件。在兩個終端上運行相同的python代碼,它們會互相干擾嗎?

1個航站樓運行:python prog.py 1000 > out_1000.out

在終端1運行該腳本終止前,我開始運行的另一個;因此終端2運行:python prog.py 100 > out_100.out

或基本上我的問題是他們可以互相干擾?

+0

你是什麼意思'覆蓋對方'? – 2016-04-29 07:40:09

+0

'a.out'會被最新的運行覆蓋,使用'>>'而不是'>','python prog.py'會在兩個終端 – ritesht93

+1

'a.out'上運行良好?我在這裏看不到C。 – 2016-04-29 07:42:47

回答

4

我正在寫輸出到磁盤中的同一個文件,然後是,它會被覆蓋。但是,您似乎將輸出打印到標準輸出,然後將它們重定向到一個文件。所以情況並非如此。

現在回答你的問題很簡單:在同一代碼的兩個不同執行之間沒有交互。當你執行一個程序或腳本時,首先OS會將代碼加載到內存中,然後執行。對代碼的後續更改與已運行的代碼無關。從技術上講,正在運行的程序稱爲進程。在兩個不同的終端上運行代碼時,操作系統上會有兩個不同的進程,每個進程都有一個進程,兩個進程無法干涉,除非您明確這麼做(IPC或進程間通信)不在這裏做。

因此總而言之,您可以在不同的終端上同時運行您的代碼,並且它們將完全獨立。

+0

+1喜歡用基本操作系統,mem/process管理概念回答問題的方式。謝謝! – KillBill

3

每個Python解釋器進程都是獨立的。腳本對多次運行本身的反應取決於使用的確切代碼,但它們不應該受到干擾,一般而言一般是

0
  1. .pyc文件的文件引用http://effbot.org/pyfaq/how-do-i-create-a-pyc-file.htm

Python的自動編譯你的腳本編譯代碼,所謂 字節代碼,運行它之前。當第一個 時間導入模塊時,或者當源文件比當前編譯的 文件更新時,包含編譯代碼的.pyc文件通常將在.py文件所在的目錄中創建爲 。

  • 如果你擔心你的代碼會被覆蓋,由於任何錯誤,你應該學會把你的代碼版本控制之下。註冊github並使用git來做到這一點。

  • 更大的符號「>」會將輸出發送到正確的處理程序。它指定文件名,它會將輸出推送到該文件名。即使在不同的終端,如果你在同一個文件夾內運行代碼,使用「>」指向SAME文件名,「>」右側的文件肯定會被覆蓋。

  • 程序源代碼在執行期間不可變。除非你獲得高級程序黑客技巧。

  • 每個程序都將在其「執行工作區」內運行。除非你製作一個代碼,使用相同的資源(如更改相同的文件,共享資源),否則不存在干擾。 (除非一個CPU全部耗盡,內存資源第二個會干擾,但那是其他故事)