Python 并行运行for循环中的所有迭代
我正在使用Pythonv2.2.1并试图编写一段代码,该代码需要在for循环中并行执行一些任务。迭代次数不是固定的,取决于列表(Python 并行运行for循环中的所有迭代,python,multithreading,for-loop,multiprocessing,python-2.2,Python,Multithreading,For Loop,Multiprocessing,Python 2.2,我正在使用Pythonv2.2.1并试图编写一段代码,该代码需要在for循环中并行执行一些任务。迭代次数不是固定的,取决于列表(serverList,在本例中)。如何通过多线程或多处理实现这一点。我通读了一些示例,但它们并行调用不同的函数。这里我需要调用相同的函数(shutdownstask),但参数不同。部分代码如下所示: try: <some code> for server in serverList: print ('Shutting down
serverList
,在本例中)。如何通过多线程或多处理实现这一点。我通读了一些示例,但它们并行调用不同的函数。这里我需要调用相同的函数(shutdownstask
),但参数不同。部分代码如下所示:
try:
<some code>
for server in serverList:
print ('Shutting down server: '+server+'...')
shutdownTask(server, serverType)
finally:
verifyStatus()
试试看:
对于服务器列表中的服务器:
打印('正在关闭服务器:'+server+'…'))
关机任务(服务器、服务器类型)
最后:
验证状态()
我向您推荐。您可以在后台为每台服务器启动一个任务
要创建任务,请使用@task
装饰器装饰函数
要运行任务,请使用添加到修饰任务函数中的delay()
方法
注意:如果您真的使用非常旧的Python版本2.2.1,我不知道是否存在兼容性问题
更新
如果你不需要这么复杂的解决方案,那么你可以去上课。我推荐你。您可以在后台为每台服务器启动一个任务
要创建任务,请使用@task
装饰器装饰函数
要运行任务,请使用添加到修饰任务函数中的delay()
方法
注意:如果您真的使用非常旧的Python版本2.2.1,我不知道是否存在兼容性问题
更新
如果您不需要如此复杂的解决方案,那么您可以使用类。您可以使用进程(或线程)池(假设您指的是Python 3.2版本):
来自多处理导入池的
def关闭(服务器):
尝试:
关机任务(服务器、服务器类型)
例外情况除外,如e:
返回服务器,str(e)
其他:
返回服务器,无
尝试:
池=池()
对于服务器,池中的错误。imap_无序(关闭,服务器列表):
如果错误为无:
打印('已完成关闭服务器:',服务器'…')
其他:
打印('关闭服务器时出错:',服务器'…',错误)
最后:
验证状态()
您可以使用进程(或线程)池(假设您指的是Python 3.2版本):
来自多处理导入池的
def关闭(服务器):
尝试:
关机任务(服务器、服务器类型)
例外情况除外,如e:
返回服务器,str(e)
其他:
返回服务器,无
尝试:
池=池()
对于服务器,池中的错误。imap_无序(关闭,服务器列表):
如果错误为无:
打印('已完成关闭服务器:',服务器'…')
其他:
打印('关闭服务器时出错:',服务器'…',错误)
最后:
验证状态()
您尝试过Python v 2.2.1吗?真正地因为这是一个古老的概念。你为什么要使用13年前版本的python?看看print函数(及其括号),你可能指的是python V3.2.1。虽然我仍然建议升级到当前版本(3.4),但给出了一个用不同参数并行调用相同函数的非常简单的示例。您可以根据自己的需要进行调整。您尝试过吗?Pythonv2.2.1?真正地因为这是一个古老的概念。你为什么要使用13年前版本的python?看看print函数(及其括号),你可能指的是python V3.2.1。虽然我仍然建议升级到当前版本(3.4),但给出了一个用不同参数并行调用相同函数的非常简单的示例。您可以根据自己的需要进行调整。为什么要安装整个芹菜框架,而内置的多处理模块可能可以做到这一点?如果您正在创建一个相当大的系统,芹菜是一个不错的选择。您可以监视任务的状态,并以一种非常简单的方式管理它们。但是,如果这是一项简单的任务,并且您不需要任何管理,那么您可以通过线程处理我看不到任何大系统的迹象,因此我会从小系统开始。为什么要安装整个芹菜框架,而内置的多处理模块可能可以做到这一点?如果您正在创建一个相当大的系统,芹菜是个不错的选择。您可以监视任务的状态,并以一种非常简单的方式管理它们。但是,如果这是一项简单的任务,并且您不需要任何管理,那么您可以通过线程处理我看不到任何关于大系统的迹象,因此我会从小系统开始。是“2.6版中的新版本”。@PeterWood:python3。2@PeterWood:阅读问题下的评论。2.2很可能是个错误。我们甚至不清楚如何安装如此古老的版本。问题下的注释验证了它是2.2.1。是“2.6版中的新版本”。@PeterWood:python3。2@PeterWood:阅读问题下的评论。2.2很可能是个错误。我们甚至不清楚如何安装如此古老的版本。问题下的注释验证了它是2.2.1。
from multiprocessing import Pool
def shutdown(server):
try:
shutdownTask(server, serverType)
except Exception as e:
return server, str(e)
else:
return server, None
try:
<some code>
pool = Pool()
for server, error in pool.imap_unordered(shutdown, serverList):
if error is None:
print('Done shutting down server:', server, '...')
else:
print('Error shutting down server:', server, '...', error)
finally:
verifyStatus()