3

我想在 Python 中模拟时间。我想每秒应用一次“my_fct”,但是我不知道“my_fct”需要多长时间才能运行,所以我不能使用睡眠。我所做的是这样的:

    past_time =  datetime.datetime.utcnow()
    present_time =  datetime.datetime.utcnow()
    for i in range(10):
        while( (present_time - past_time).total_seconds()  < 1):
            present_time = datetime.datetime.utcnow()
        my_fct(......)
        past_time = present_time

我不认为这是一个好方法吗?什么是正确的解决方案?谢谢

4

1 回答 1

6

运行您的代码给出:

>>> 

Traceback (most recent call last):
  File "C:\python\tester.py", line 6, in <module>
    while((present_time - past_time) < 1):
TypeError: can't compare datetime.timedelta to int

你需要的是这样的:

import datetime

past_time =  datetime.datetime.utcnow()
present_time =  datetime.datetime.utcnow()
for i in range(10):
    while((present_time - past_time).seconds < 1):
        present_time = datetime.datetime.utcnow()
    my_fct(......)
    past_time = present_time

time-time 给出一个 timedelta 值。你需要这个值的秒数。然后与您的 int 进行比较。

编辑:但是,我现在意识到这不是您正在寻找的解决方案。

这是一种使用线程的方法(一种非常简单的方法 - 容易出现问题,具体取决于做什么my_fct()。)

import time
from threading import Thread

 for i in range(10):
    time.sleep(1)
    t = Thread(target=my_fnc, args=(......))
    t.start()
于 2012-08-22T09:56:51.847 回答