首页 > 解决方案 > func 必须是一个可调用的或文本引用

问题描述

我试图每 2 分钟运行一次函数,为此我使用 apscheduler。但是,当我运行它时,我收到以下错误:

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

这是代码:

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)

我想每 2 分钟运行一次的函数是 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()

标签: pythonapscheduler

解决方案


您正在调用函数 get_warnings,而不是将其作为可调用对象提供。尝试:

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

推荐阅读