为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑8549860 2023-02-07 14:20:59
假设我有一个 for 循环,里面有一个 time.sleep 函数import timelist = [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)
查看完整描述

4 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

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


for _ in range(10):     # how many times do these 3 function calls happen?

    for idx in range(3):

        FunctionThatDoesSomethingTimeRelated(idx)

    time.sleep(3)


查看完整回答
反对 回复 2023-02-07
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

请在您的提问中更加清楚,您目前正在使用相同的函数名称来描述(大概)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 次。


查看完整回答
反对 回复 2023-02-07
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

这是你想做的吗?


import time


list = [1, 2, 3]


for i in list:

    FunctionThatDoesSomethingTimeRelated(i)


time.sleep(3)


for i in list:    

    FunctionThatDoesSomethingTimeRelated(i) 


查看完整回答
反对 回复 2023-02-07
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

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


从:


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

这将确保执行顺序得到维护(先进先出),同时输出将先完成,先服务。希望我回答了这个问题,或者这有帮助!


查看完整回答
反对 回复 2023-02-07
  • 4 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信