Python dict с записью по таймеру

#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 секунды после этого.