1

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

我试过使用这段代码:

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

4 回答 4

3

正如 vossad01 在评论中所指出的,您的代码在循环内有 5 秒的延迟。这将导致列表中任意两个项目之间有 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)
于 2012-09-15T18:40:30.913 回答
2

首先,由于全局解释器锁 (GIL),多线程并行化不会产生性能提升。因此,如果您出于性能原因这样做,则需要查看多处理模块。看看我如何并行化一个简单的 python 循环?有关使用进程池的映射成员来完成此操作的示例。

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

于 2012-07-03T14:17:24.780 回答
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 )
于 2012-07-03T14:12:59.930 回答
0

使用*运算符一次解压整个列表

do_stuff_that_includes_x(*x)
于 2012-07-03T14:01:23.330 回答