“如何在特定的时间延迟列表上打印列表数据?”

时间:2019-07-26 06:14:25

标签: python

我想按另一个列表上的特定延迟打印列表数据。我想在特定时间内循环执行此过程,但无法在线程中实现它。

from time import sleep
import datetime

now = datetime.datetime.now()
Start_Time = datetime.datetime.now()
Str_time = Start_Time.strftime("%H:%M:%S")
End_Time = '11:15:00'


class sampleTest:

    @staticmethod
    def test():
        list1 = ["Hello", "Hi", "Ola"]
        list2 = [5, 10, 7]
        # print(f"{data} delay {delay} & time is {t} ")
        # sleep(delay)
        i = 0
        while i < len(list1):
            t = datetime.datetime.now().strftime('%H:%M:%S')
            print(f"{list1[i]} delay {list2[i]} & time is {t} ")
            sleep(list2[i])
            i += 1
        else:
            print("All Data is printed")


if __name__ == '__main__':
    obj = sampleTest
    while Str_time < End_Time:
        obj.test()
        Str_time = datetime.datetime.now().strftime("%H:%M:%S")
    else:
        print("Time Is done")

预期的输出:在第一个循环中,它应该打印所有列表数据,但是在第二个循环中,它应该按照延迟运行。

1st time: Hello, Hi, Ola
after that
 1. Every 5 seconds it should print Hello 
 2. Every 10 seconds it should print Hi  
 3. Every 7seconds it should print Ola

实际输出:根据延迟打印数据列表。

Hello delay 5 & time is 11:41:45 
Hi delay 10 & time is 11:41:50 
Ola delay 3 & time is 11:42:00 
All Data is printed
Hello delay 5 & time is 11:42:03 
Hi delay 10 & time is 11:42:08 
Ola delay 3 & time is 11:42:18 

3 个答案:

答案 0 :(得分:0)

您可以尝试将当前时间与开始时间进行比较,例如:

export const get = async function(url) {
  const response = await fetch(url, {
    credentials: "include"    // added this for safari 10
  });
  return await response.json();
};

以下是实现此目的的完整代码:

time.sleep(1);
diff = int(time.time() - start_time)
if (diff % wait_time == 0):
    print(text_to_print)

答案 1 :(得分:0)

执行此操作的一种方法是在您获得的列表中重复执行“ if”语句。

String path = "cmd /c start d:\\java.bat"; 
Runtime rn = Runtime.getRuntime();
Process pr = rn.exec(path);

输出:

import time
starttime=time.time()
list1 = ["Hello", "Hi", "Ola"]
list2 = [5, 10, 7]
n=0
while n<25:    # delay time in secons
  time.sleep(1);
  diff = int(time.time() - starttime)
  print(diff)
  for i in range(len(list1)):
    if (diff % list2[i] == 0):
      print(list1[i])
  n+=1

答案 2 :(得分:0)

根据您期望的输出,我相信线程是最好的选择,这意味着:

from time import sleep
import datetime
import threading

now = datetime.datetime.now()
Start_Time = datetime.datetime.now()
Str_time = Start_Time.strftime("%H:%M:%S")
End_Time = '11:15:00'

class sampleTest:
    def __init__(self):
        self.run = True
        print ("1st time: Hello, Hi, Ola")
        print ("Now: " +  datetime.datetime.now().strftime('%H:%M:%S'))

    def test(self, i):
        list1 = ["Hello", "Hi", "Ola"]
        list2 = [5, 10, 7]
        while self.run:
            sleep(list2[i])
            t = datetime.datetime.now().strftime('%H:%M:%S')
            print(f"{list1[i]} delay {list2[i]} & time is {t}")

    def stop(self):
        self.run = False

if __name__ == '__main__':
    obj = sampleTest()
    t1 = threading.Thread(target=obj.test,args=(0,))
    t2 = threading.Thread(target=obj.test,args=(1,))
    t3 = threading.Thread(target=obj.test,args=(2,))
    t1.start()
    t2.start()
    t3.start()
    while Str_time < End_Time:
        Str_time = datetime.datetime.now().strftime("%H:%M:%S")
    else:
        obj.stop()
        t1.join()
        t2.join()
        t3.join()
        print("All data is printed")
        print("Time Is done")