Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行多个Python脚本_Python_Multiprocessing - Fatal编程技术网

运行多个Python脚本

运行多个Python脚本,python,multiprocessing,Python,Multiprocessing,我想创建一个简单的Python程序,它将同时执行两个独立的脚本。目前,这两个脚本只是打印一系列数字,但我的意图是在将来使用这个程序同时运行几个Twitter流媒体程序 我怀疑我需要使用subprocess.Popen,但我不能完全理解应该在其中输入哪些参数。关于StackOverflow也有类似的问题,但是这里提供的代码(粘贴在下面)没有打印任何内容。我将感谢你的帮助 我的档案是: 螺纹1.py 螺纹2.py import subprocess subprocess.Popen(['scree

我想创建一个简单的Python程序,它将同时执行两个独立的脚本。目前,这两个脚本只是打印一系列数字,但我的意图是在将来使用这个程序同时运行几个Twitter流媒体程序

我怀疑我需要使用
subprocess.Popen
,但我不能完全理解应该在其中输入哪些参数。关于StackOverflow也有类似的问题,但是这里提供的代码(粘贴在下面)没有打印任何内容。我将感谢你的帮助

我的档案是:

螺纹1.py
螺纹2.py

import subprocess

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

正如wanderlust提到的,为什么要这样做而不是通过linux命令行

否则,您发布的解决方案就是在做它想要做的事情,也就是说,您是在命令行中这样做的:

screen ./thread1.py
screen ./thread2.py
chmod u+x thread*.py
这将打开屏幕会话并在此屏幕会话中运行程序和输出,这样您就不会直接在终端上看到输出。要解决输出中的问题,只需执行脚本而无需屏幕调用:

import subprocess

subprocess.Popen(['./thread1.py'])
subprocess.Popen(['./thread2.py'])
thread1.py的内容:

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

countToTen()
thread2.py的内容:

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

countToHundreds()
然后不要忘记在命令行中执行此操作:

screen ./thread1.py
screen ./thread2.py
chmod u+x thread*.py
使用
supervisord
过程控制系统只是为了运行多个命令行脚本

它的特点是:

  • 多重受控过程
  • 自动重新启动失败的运行
  • 日志标准输出和标准输出
  • 按顺序启动脚本(使用优先级)
  • 用于查看最新日志输出、停止、启动和重新启动进程的命令行实用程序

此解决方案仅适用于基于*nix的系统,在Windows上不可用。

您也可以打开多个命令提示符窗口,一次运行多个Python程序-只需在每个窗口中运行一个:

在每个命令提示窗口中,转到正确的目录(例如C:/Python27),然后在一个命令提示窗口中键入“python YourCodeNo1.py”,在下一个命令提示窗口中键入“python YourCodeNo2.py”


目前,我正在以这种方式一次运行3个代码,而不会减慢任何代码的速度。

在Unix中使用管道运行并行进程不是更简单、更明显吗?即
/thread1.py/py
是的,普通的Unix进程管道可以实现这一点。如果只是一个提示,如果操作是I/O绑定,则应该考虑在Python中使用线程来处理进程。谢谢,我已经尝试了您所建议的:Python。thread2.py,但我只从第一个脚本中获取打印的数字,我希望两个脚本同时运行;python thread2.py。在您的例子中,我假设您没有python序言,因此您的脚本需要使用python解释器,正如我前面所述。这就是为什么第二个脚本没有运行的原因。请注意,您应该位于文件所在的目录中,并且不需要“/”前缀,这表示您要从当前文件夹中获取文件。我已尝试将上述Unix方法用于下载Twitter时间表的两个脚本。不幸的是,这些脚本似乎不是并行运行的。我的每个脚本都构建一个单独的MySQL表,我可以看到第二个脚本的表只有在我中断第一个脚本之后才开始构建。这就是@AashishP提到的情况吗?我应该使用线程吗?谢谢,我尝试过使用上面的脚本(在空闲状态下),但是我遇到了很多错误。回溯(最后一次调用):第3行,在subprocess.Popen(['./thread1.py'])文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”中,第709行,在init errread,errwrite)文件“/Library/Frameworks/python2.7/subprocess.py”中,第1326行,在_execute_child raise child_exception OSError:[Errno 13]权限被拒绝这很可能与“thread1”和“thread2”的内容有关。你能提供一些细节吗?当然,我已经有了UNIX解决方案,但我很好奇subprocess.Popen有什么问题。这里是thread1:'def countToTen():对于范围(10)中的i:print i countToTen()'和thread2:'def counthucks():对于范围(10)中的i:print i*100 counthucks()'我运行此代码时出错:'import subprocess subprocess.Popen(['thread1.py'])subprocess.Popen(['thread2.py'])“P.S抱歉我的格式设置不好,我需要学习如何在此设置格式您缺少thread1.py和thread2.py前面的“/”。另外,在每个文件thread1.py和thread2.py中,您需要指向python可执行文件,即.#/usr/bin/env python'。您还需要使它们可执行,即“chmodu+x thread*.py”。否则,它应该像你想要的那样工作。我将编辑我的文章以包括这一点。谢谢,它现在可以从命令行运行(但如果我只是尝试在空闲状态下运行它就不行了,但您可能无法在那里运行并发程序)。我需要仔细阅读“chmod”一行,但对于Python初学者来说,这是一堂非常有价值的课。