并行运行for循环中的所有迭代

时间:2015-06-29 07:21:14

标签: python multithreading for-loop multiprocessing python-2.2

我正在使用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()

2 个答案:

答案 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()