当前位置: 首页 > 面试题库 >

Python中的异步后台进程?

姚星腾
2023-03-14
问题内容

我也在读这篇文章:http :
//www.python.org/dev/peps/pep-3145/

对于我们的项目,我们有5个svn检出项需要先更新,然后才能部署我们的应用程序。在我的开发环境中,对于生产效率而言,快速部署比生产部署更为重要,我一直在努力加快流程。

我有一个运行良好的bash脚本,但有一些限制。我使用以下bash命令启动多个“ svn更新”:

(svn update /repo1) & (svn update /repo2) & (svn update /repo3) &

这些都并行运行,并且效果很好。我还将在其余的构建脚本中使用此模式来触发每个ant构建,然后将战争转移到Tomcat。

但是,如果其中一项更新或构建失败,我将无法停止部署。

我正在用Python重新编写bash脚本,因此可以更好地控制分支和部署过程。

我正在使用subprocess.call()触发“ svn update / repo”命令,但是每个命令都按顺序执行。我尝试’(svn update /
repo)&’,所有这些都触发​​了,但是结果代码立即返回。因此,我无法确定特定命令在异步模式下是否失败。

import subprocess

subprocess.call( 'svn update /repo1', shell=True )
subprocess.call( 'svn update /repo2', shell=True )
subprocess.call( 'svn update /repo3', shell=True )

我很想找到一种使Python触发每个Unix命令的方法,如果任何调用在任何时候都停止了,则整个脚本都会停止。


问题答案:

不要使用shell=True。它会不必要地调用shell来调用您的svn程序,这将为您提供shell的返回码,而不是svn的返回码。

repos = ['/repo1', '/repo2', '/repo3']
# launch 3 async calls:
procs = [subprocess.Popen(['svn', 'update', repo]) for repo in repos]
# wait.
for proc in procs:
    proc.wait()
# check for results:
if any(proc.returncode != 0 for proc in procs):
    print 'Something failed'


 类似资料:
  • 问题内容: python中有异步编程的一般概念吗?我可以为一个函数分配一个回调,执行该回调并立即返回主程序流程,无论该函数执行需要多长时间? 问题答案: 在这里看看: Python异步编程 异步编程和扭曲简介 值得检查: asyncio(以前为Tulip)已被检入Python默认分支 于14-Mar-2018编辑 如今,Python具有asyncIO-内置的异步I / O,事件循环,协程和任务 。

  • 问题内容: 我正在尝试将Shell脚本移植到可读性更高的python版本。原始的shell脚本在后台使用“&”启动多个进程(实用程序,监视器等)。如何在python中达到相同的效果?我希望这些过程在Python脚本完成后不会消失。我敢肯定它与守护程序的概念有关,但是我找不到如何轻松实现此目的。 问题答案: 注意:此答案的最新版本比2009年发布时要少。现在建议在文档中使用其他答案中显示的模块 (请

  • 问题内容: 我有一个Python脚本,有时会向用户显示图像。图像有时可能很大,并且经常重复使用。显示它们不是关键,但显示与它们关联的消息是至关重要的。我有一个功能,可以下载所需的图像并将其保存在本地。现在,它与向用户显示消息的代码内联运行,但是对于非本地图像,有时可能会花费10秒钟以上。有没有一种方法可以在需要时调用此函数,但是在代码继续执行的同时在后台运行?我只会使用默认图像,直到正确的图像可用

  • 问题内容: 我的目标很简单:启动rsync并不要等待。 Debian上的Python 2.7.9 样例代码: (我之所以注释掉执行命令,只是因为我实际上将所有试验都保留在代码中,以便我知道自己已经做过什么以及尚未完成什么。显然,我会以正确的方式运行脚本行未注释。) 这是怎么回事…我可以在服务器上观看传输,完成传输后,我会在屏幕上看到“完成”字样。 我想发生的是在发出命令并立即开始传输后立即打印“完

  • 问题内容: 我需要Python中的一种回调类型的功能,在该功能中,我多次向Web服务发送请求,并且每次都更改参数。我希望这些请求同时发生而不是顺序发生,因此我希望函数被异步调用。 看起来异步可能是我想使用的东西,但是我所看到的有关其工作原理的示例看起来都像是过分杀了,所以我想知道是否还有其他方法应该走下去。对模块/过程有什么建议吗?理想情况下,我想以过程方式使用它们而不是创建类,但是我可能无法解决

  • 问题内容: 我正在尝试制作一个PHP脚本,我已经完成了脚本,但是大约要花10分钟才能完成它打算完成的过程。这不是问题,但是我想我必须一直保持页面加载,这很烦人。我可以使用它来启动该过程,然后在10分钟后再回来查看它生成的日志文件吗? 问题答案: 好吧,您可以使用“ ignore_user_abort(true)” 因此,脚本将继续起作用(注意脚本的持续时间,也许添加“set_time_limit(