猿问

在 Python 中有没有一种方法可以创建一个 for 循环,该循环不等待内部代码完成后再进行再次迭

假设我有一个 for 循环,里面有一个 time.sleep 函数


import time


list = [1, 2, 3]


for i in list:

    FunctionThatDoesSomethingTimeRelated(i)

    time.sleep(3)

    FunctionThatDoesSomethingTimeRelated(i)

有没有办法让循环同时遍历列表的每个部分,而不是等待循环内的代码被执行?


基本上执行顺序需要是这样的:


FunctionThatDoesSomethingTimeRelated(1)

FunctionThatDoesSomethingTimeRelated(2)

FunctionThatDoesSomethingTimeRelated(3)

time.sleep(3)

FunctionThatDoesSomethingTimeRelated(1)

FunctionThatDoesSomethingTimeRelated(2)

FunctionThatDoesSomethingTimeRelated(3)

而不是这个:


FunctionThatDoesSomethingTimeRelated(1)

time.sleep(3)

FunctionThatDoesSomethingTimeRelated(1)

FunctionThatDoesSomethingTimeRelated(2)

time.sleep(3)

FunctionThatDoesSomethingTimeRelated(2)

FunctionThatDoesSomethingTimeRelated(3)

time.sleep(3)

FunctionThatDoesSomethingTimeRelated(3)


慕尼黑8549860
浏览 163回答 4
4回答

qq_遁去的一_1

您可以使用嵌套的 for 循环:for _ in range(10):     # how many times do these 3 function calls happen?    for idx in range(3):        FunctionThatDoesSomethingTimeRelated(idx)    time.sleep(3)

慕娘9325324

请在您的提问中更加清楚,您目前正在使用相同的函数名称来描述(大概)2个不同的函数。同样使用硬编码计时来等待完成通常不是一个好主意。您可以只使用 2 个 for 循环来获得上述结果。import timelist1 = [1, 2, 3]for i in list1:    timeRelFunction1(i)time.sleep(3)for i in list1:    timeRelFunction2(i)   同样list在这里用作变量名也不是正确的方法,因为它是一个内置类。根据评论编辑:你可以尝试使用这样的东西,每 3 秒检查一次股票n价格import timelist1 = [1, 2, 3]def stockPriceEveryThreeSeconds(number_of_repetitions):    for i in range(number_of_repetitions):        for i in list1:            getStockPrices(i)        time.sleep(3)stockPriceEveryThreeSeconds(2)上面的代码会每 3 秒检查一次股票价格,共 2 次。

红糖糍粑

这是你想做的吗?import timelist = [1, 2, 3]for i in list:    FunctionThatDoesSomethingTimeRelated(i)time.sleep(3)for i in list:        FunctionThatDoesSomethingTimeRelated(i) 

慕勒3428872

根据我正在阅读的问题,您正在寻找列表操作的一些并发性。有几种方法可以解决这个问题,最优化的是迄今为止最复杂的。但一个简单的入门方法是使用线程模块。您可以通过这种方式修改以下代码:从:import timelist = [1, 2, 3]for i in list:    FunctionThatDoesSomethingTimeRelated(i)    time.sleep(3)    FunctionThatDoesSomethingTimeRelated(i)到:def functionThatThreads(numberOfLoops):    import time    import threading    list = [1, 2, 3]    for _ in range(numberOfLoops):        for i in list:            threading.Thread(target=FunctionThatDoesSomethingTimeRelated, args=(i,)).start()        time.sleep(3)def FunctionThatDoesSomethingTimeRelated(i):    print(i)functionThatThreads(2)输出: python .\testing.py123123这将确保执行顺序得到维护(先进先出),同时输出将先完成,先服务。希望我回答了这个问题,或者这有帮助!
随时随地看视频慕课网APP

相关分类

Python
我要回答