2014-06-11 294 views
2

我想創建一個簡單的Python程序,它將同時執行2個獨立的腳本。目前,這兩個腳本只是打印一系列數字,但我的目的是使用此程序在未來同時運行一些Twitter流式播放程序。運行多個Python腳本

我懷疑我需要使用subprocess.Popen,但我不能完全理解我應該在哪裏提出的論據。在StackOverflow上有類似的問題,但在那裏提供的代碼(粘貼在下面)不會打印任何東西。我會感謝你的幫助。

我的文件有:

thread1.py
thread2.py

import subprocess 

subprocess.Popen(['screen', './thread1.py'])) 
subprocess.Popen(['screen', './thread2.py']) 
+1

在Unix中使用管道運行並行進程是不是更簡單也更明顯? 也就是說''./thread1.py; ./ thread2.py'' – wanderlust

+0

是的,普通的Unix進程管道就可以做到這一點。然而,如果操作受到I/O限制,你應該考慮在Python中使用線程而不是進程。 –

+0

謝謝,我試過你的建議:python ./thread1.py;./thread2.py 但我只從第一個腳本獲取打印的數字,我希望這兩個腳本在相同的條件下運行時間。 – user3722736

回答

1

正如癖提到的,你爲什麼要這樣來做,而不是通過Linux命令行?

否則,您發佈的解決方案是做什麼它意味着,也就是說,你在命令行中執行此操作:

screen ./thread1.py 
screen ./thread2.py 

這將打開一個屏幕會話並運行在這一程序和輸出屏幕會話,這樣你就不會直接在終端上看到輸出。麻煩拍你輸出,只需執行腳本,而不在屏幕的呼叫:thread1.py的

import subprocess 

subprocess.Popen(['./thread1.py']) 
subprocess.Popen(['./thread2.py']) 

內容:thread2.py的

#!/usr/bin/env python 
def countToTen(): 
    for i in range(10): 
    print i 

countToTen() 

內容:

#!/usr/bin/env python 
def countToHundreds(): 
for i in range(10): 
    print i*100 

countToHundreds() 

然後唐別忘了在命令行上這樣做:

chmod u+x thread*.py 
+0

謝謝,我試過使用上面的腳本(在空閒),但我得到了很多錯誤。回溯(最近呼叫最後): 第3行,在 subprocess.Popen(['./ thread1.py']) File「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7 /subprocess.py」,線路709,在__init__ errread,ERRWRITE) 文件 「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py」,線1326,在_execute_child 加薪child_exception OSError:[Errno 13] Permission denied – user3722736

+0

這很可能與您的'thread1'和'thread2'的內容有關。你能提供任何細節嗎? – jonnybazookatone

+0

當然,我得到了UNIX解決方案的工作,但我很好奇我的subprocess.Popen有什麼問題。下面是線程1: '變形點焊countToTen(): 對於i在範圍(10): 打印我 countToTen()' 和線程2:'變形點焊countHundreds():在範圍 對於i(10): 打印我* 100 countHundreds()'我在運行此代碼時遇到錯誤:'import subprocess subprocess.Popen(['thread1.py']) subprocess.Popen(['thread2.py'])'PS對不起對於我的格式不好,我需要學習如何在此格式化 – user3722736

1

使用supervisord

supervisord僅用於運行多個命令行腳本的過程控制系統。

其特點是:(使用優先級)

  • 命令行實用程序來查看最新

    • 多個控制的過程
    • autorestarting失敗的運行,以便
    • 日誌輸出和錯誤輸出
    • 開始腳本日誌輸出,停止,啓動,重啓進程

    此解決方案僅適用於基於* nix的系統,它不適用於Windows。

  • 1

    你也可以只打開幾個命令提示符窗口同時運行多個Python程序 - 只需運行一個在他們每個人:

    在每一個命令提示符窗口,進入到正確的目錄(如C:/ Python27),然後鍵入'python YourCodeNo 。py'在一個命令提示符窗口中,'python YourCodeNo .py'在下一個等。 。

    我目前正在以這種方式一次運行3個代碼,而不會減慢它們中的任何一個。

    +0

    請參閱http://comments.gmane.org/gmane.comp.python.tutor/77257 – LinnK