如何让Python同时为列表中的所有项做一个循环?

时间:2012-07-03 13:59:31

标签: python list loops for-loop python-2.7

我有一个列表,我正在尝试为列表中的每个项目进行循环,同时

我尝试过使用此代码:

thelist = ['first', 'second', 'third']

def loop():
    while True:
        for x in thelist:
            x = str(x)
            time.sleep(5)
            do_stuff_that_includes_x()

但它在循环逐个中按照thelist排序。

我希望它同时为thelist 中的所有项目执行操作

提前致谢。

4 个答案:

答案 0 :(得分:4)

正如vossad01的评论中所指出的,你的代码在你的循环内有5秒的延迟。这将导致列表中任何两个项目之间延迟五秒钟。如果您删除5秒延迟,您的消息将近乎即时发送到列表中的所有房间。

thelist = ['first', 'second', 'third']

def loop():
    while True:
        for x in thelist:
            x = str(x)
            do_stuff_that_includes_x() 

        time.sleep(5)

答案 1 :(得分:2)

我认为你需要多处理:

import time

def work(x):
    x = str(x)
    time.sleep(5)
    print x
#   do_stuff_that_includes_x()

thelist = ['first', 'second', 'third']
from multiprocessing import Pool
p = Pool( len( thelist ) )
p.map( work, thelist )

答案 2 :(得分:2)

首先,由于全局解释器锁定(GIL),多线程并行化不会产生性能提升。因此,如果出于性能原因而执行此操作,则需要查看multiprocessing模块。有关使用进程池的map成员来完成此操作的示例,请参阅how do I parallelize a simple python loop?

附注:重新分配迭代变量(x)是不好的形式。此外,由于您希望并行执行,因此如果您可以在x上对do_stuff_that_includes_x()进行参数化,这将是最简单的。

答案 3 :(得分:0)

使用*运算符立即解压缩整个列表

do_stuff_that_includes_x(*x)