Функция set_interval создаёт таймер, который запускает пользовательскую функцию раз в n секунд. Нужно передать в него функцию с параметром.
import threading
from random import uniform
t = None # Перемнная с таймером
def set_interval(func, sec):
"""
Создаёт таймер
"""
global t
def func_wrapper():
set_interval(func, sec)
func()
t = threading.Timer(sec, func_wrapper)
t.start()
return t
def stop_position():
"""
Останавливает таймер
"""
global t
if t is not None:
t.cancel()
t = None
def position(callback):
"""
Запускает вызов пользовательской функции раз в секунду
"""
global t
t = set_interval(lambda: do_callback(callback), 1)
def do_callback(callback):
"""
Генерирует данные и передаёт в принимающую функцию
"""
data = {
'latitude': uniform(54.0, 56.0),
'longitude': uniform(35.0, 38.0),
'altitude': uniform(200, 250),
'vertical_accuracy': uniform(5, 20),
'horizontal_accuracy': uniform(5, 40),
}
callback(data)
#Test
def foo(data):
print(data)
position(foo)
Пишет ошибку:
TypeError: <lambda>() takes exactly 1 argument (0 given)
Питон 2.7