我正在使用Python v 2.2.1并尝试编写一个需要在for循环中并行执行某些任务的代码。迭代次数不固定,取决于列表(在本例中为serverList
)。如何通过多线程或多处理实现这一目标。我通读了一些例子,但他们并行调用了不同的函数。在这里,我需要调用相同的函数(shutdownTask
),但使用不同的参数。部分代码如下:
try:
<some code>
for server in serverList:
print ('Shutting down server: '+server+'...')
shutdownTask(server, serverType)
finally:
verifyStatus()
答案 0 :(得分:0)
我建议你Celery。您可以在后台为每台服务器启动一个任务。
要创建任务,请使用@task
装饰器装饰您的功能。
要运行任务,请使用添加到修饰任务函数的delay()
方法。
注意:如果您真的使用的是旧版本的Python 2.2.1,我不知道是否存在兼容性问题
<强>更新强>
如果您不需要这么复杂的解决方案,那么您可以使用Thread
课程。
答案 1 :(得分:-1)
您可以使用进程(或线程)池(假设您的意思是Python 3.2版本):
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()