У меня есть следующий тип кода, но он медленный, потому что report()
вызывается очень часто.Throttle вызов функции в python
import time
import random
def report(values):
open('report.html', 'w').write(str(values))
values = []
for i in range(10000):
# some computation
r = random.random()/100.
values.append(r)
time.sleep(r)
# report on the current status, but this should not slow things down
report(values)
В этом иллюстративном примере коды, я хотел бы доклад будет уточненным (в большинстве 10s старого), так что я хотел бы придушить эту функцию.
Я могу разблокировать отчет, записать текущую временную метку и дождаться этого периода и проверить с помощью метки времени с общей памятью, если отчет был вызван тем временем. Если да, прекратите, если нет, напишите отчет.
Есть ли более элегантный способ сделать это в Python?
Использование многопоточности с общей очереди? – jonrsharpe
Я предполагаю, что это медленно, потому что вы каждый раз открываете файл (который также должен быть закрыт). Если вы сохраните файл открытым (передайте его в функцию отчета или создайте класс 'reporter'), это может занять некоторое время. – Holloway
Вы собираетесь переписывать файл каждый раз? – MattH