user12333470
user12333470

Reputation:

func must be a callable or a textual reference to one

I am trying to run a function every 2 minutes, and I use apscheduler for this. However, when I run this I get the following error:

Traceback (most recent call last):
  File "main_forecast.py", line 7, in <module>
      scheduler.add_job(get_warnings(), 'interval', seconds = 120)
  File "/home/anastasispap/.local/lib/python3.6/site-packages/apscheduler/schedulers/base.py", line 434, in add_job
      job = Job(self, **job_kwargs)
  File "/home/anastasispap/.local/lib/python3.6/site-packages/apscheduler/job.py", line 49, in __init__
      self._modify(id=id or uuid4().hex, **kwargs)
  File "/home/anastasispap/.local/lib/python3.6/site-packages/apscheduler/job.py", line 170, in _modify
      raise TypeError('func must be a callable or a textual reference to one')
TypeError: func must be a callable or a textual reference to one

And here's the code:

from apscheduler.schedulers.background import BackgroundScheduler
from enemies_info import get_warnings
import time

scheduler = BackgroundScheduler()
scheduler.add_job(get_warnings(), 'interval', seconds = 120)
scheduler.start()

while True:
    time.sleep(120)

The function I want to run every 2 minutes is get_warnings.

def get_warnings():
print('get_warning has been run')
names = []
types = []
number_of_threats = 0    
forecast_weather()
for i in range(0, number_of_enemies):
    enemies = info["enemies"][i]        
    name = enemies["name"]
    type = enemies["type"]
    temperature = enemies["temperature"]
    temperature = temperature.split("-")
    min_temp = temperature[0]
    max_temp = temperature[1]
    for i in range(len(temperatures)):
        if avg_temps[i] <= str(max_temp):
            names.append(name)
            types.append(type)
            number_of_threats += 1
            break
    os.chdir('..')
    write_data(number_of_threats, names, types)      
move_to_github()

Upvotes: 5

Views: 5751

Answers (1)

Arn
Arn

Reputation: 2015

You are calling the function get_warnings, instead of providing it as a callable. Try:

scheduler.add_job(get_warnings, 'interval', seconds = 120)

Upvotes: 8

Related Questions