2014-06-11 253 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