有没有办法在 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)

您可以使用嵌套的 for 循环:

for _ in range(10):     # how many times do these 3 function calls happen?
for idx in range(3):
FunctionThatDoesSomethingTimeRelated(idx)
time.sleep(3)

请在提问中更清楚地说明,您目前正在使用相同的函数名称来描述(大概(2 个不同的函数。

此外,使用硬编码计时来等待完成通常不是一个好主意。

你可以只使用 2 for 循环来获得上述结果。

import time
list1 = [1, 2, 3]
for i in list1:
timeRelFunction1(i)
time.sleep(3)
for i in list1:
timeRelFunction2(i)

在这里使用list作为变量名也不是正确的方法,因为它是一个内置类。

根据评论编辑:

您可以尝试使用这样的东西,每 3 秒检查一次股票价格n

import time
list1 = [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 time
list = [1, 2, 3]
for i in list:
FunctionThatDoesSomethingTimeRelated(i)
time.sleep(3)
for i in list:    
FunctionThatDoesSomethingTimeRelated(i) 

根据我正在阅读的问题,您正在寻找列表操作的并发性。有几种方法可以做到这一点,其中最优化的方法是迄今为止最复杂的方法。但是一个简单的入门方法是使用线程模块。您可以按这种方式修改以下代码:

从:

import time
list = [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.py
1
2
3
1
2
3

这将确保保持执行顺序(先执行(,而输出将首先完成,先服务。希望我回答了这个问题,或者这会有所帮助!

最新更新