#python #dictionary #timer
#python #словарь #таймер
Вопрос:
Я хочу создать dict, имеющий в качестве записи таймер. Когда время ожидания таймера записи истекает, следует вызвать функцию, чтобы выполнить некоторую обработку этой записи. например:
dict = [key, timer]
if timer == 0
f(key, timer)
Есть ли какой-либо способ сделать это.
Большое спасибо за вашу помощь.
с уважением,
Карим
Ответ №1:
Вы могли бы создать все свои значения объектами timer, которые будут срабатывать через заданное количество времени. Однако это заставит вашу программу полагаться на модуль threading.
В качестве альтернативы, у вас мог бы быть один «поток таймера», который время от времени просматривает все элементы в словаре и уменьшает количество. Если он обнаружит, что элемент уменьшился до нуля, он должен вызвать обратный вызов.
Если ваш словарь зависит от «количества обращений», а не от фактического времени, вам, возможно, следует подумать о захвате вызовов access и использовании их для увеличения и уменьшения количества, а не с использованием потоков (т. Е. путем переопределения или переноса __setitem__
и __getitem__
).
Ответ №2:
@karim: Вам определенно следует обратить внимание на библиотеки, управляемые событиями, такие как Gevent или Twisted. Например, в Gevent есть что-то вроде gevent.spawn_later(seconds, function, *args, **kwargs)
, что, я думаю, довольно близко соответствует вашим потребностям. Вы даже можете создавать функции не по порядку.
Например:
gevent.spawn_later(5, f1)
gevent.spawn_later(3, f2)
И f2
будет выполнен через 3 секунды, затем f1
через 2 секунды после этого.