Apscheduler 运行一次然后抛出 TypeError [英] Apscheduler runs once then throws TypeError

查看:51
本文介绍了Apscheduler 运行一次然后抛出 TypeError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试每小时将某人的 soundcloud 关注者列表添加到数据库中.我有代码可以拉出他们的关注者列表并将它们添加到数据库中,但是当我将它与 apscheduler 一起使用时遇到了错误.

I'm trying to add a list of someone's soundcloud followers to a database every hour. I have the code working to pull their list of followers and add them to a db, but I run into errors when I use it with apscheduler.

以下是错误示例:

Traceback (most recent call last):
  File "desktop/SoundcloudProject/artistdailyfollowers.py", line 59, in <module>
    scheduler.add_job(inserttodaysdata(), 'interval', hours=1)
  File "//anaconda/lib/python3.5/site-packages/apscheduler/schedulers/base.py", line 425, in add_job
    job = Job(self, **job_kwargs)
  File "//anaconda/lib/python3.5/site-packages/apscheduler/job.py", line 44, in __init__
    self._modify(id=id or uuid4().hex, **kwargs)
  File "//anaconda/lib/python3.5/site-packages/apscheduler/job.py", line 165, 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

代码如下:

import soundcloud
import sqlite3
import datetime
import time
from apscheduler.schedulers.blocking import BlockingScheduler

client = soundcloud.Client(client_id='f3b669e6e4509690939aed943c56dc99')
conn = sqlite3.connect('desktop/SoundcloudProject/RageLogic.db')
c = conn.cursor()
writenow = datetime.datetime.now()
print("If this is printing that means it's running")
print("The time is now: \n" +str(writenow))
page ='https://soundcloud.com/ragelogic'
page_size = 200

def create_table():
    c.execute('CREATE TABLE IF NOT EXISTS RageLogicFollowersByDay(day TEXT, list_of_followers TEXT)')

#add todays date and a list of followers to the db
def inserttodaysdata():
    global page
    full = False
    user = client.get('/resolve', url=page)
    ufollowing = []
    ufirstfollowing = client.get('/users/'+str(user.id)+'/followers', order='id',limit=page_size, linked_partitioning=1)
    for user in ufirstfollowing.collection:
        ufollowing.append(user.id)
    if hasattr(ufirstfollowing, "next_href"):
        #print("MANYFOLLOWING")
        newlink = ufirstfollowing.next_href
        try:
            while full == False:
                newlist = client.get(newlink)
                for user in newlist.collection:
                    ufollowing.append(user.id)
                print(len(ufollowing))
                if newlist.next_href == None:
                    print("full")
                    full = True
                else:
                    newlink = newlist.next_href
        except AttributeError:
            None

    #print(len(ufollowing))
    wtl = []
    wtl = repr(ufollowing)
    writenow = datetime.datetime.now()
    c.execute("INSERT INTO RageLogicFollowersByDay (day, list_of_followers) VALUES (?, ?)",(str(writenow), wtl))
    conn.commit()

#create_table()
scheduler = BlockingScheduler()
scheduler.add_job(inserttodaysdata(), 'interval', hours=1)
scheduler.start()

我对这整件事真的很陌生,任何人都可以提供任何帮助都很棒,谢谢!

I'm really new to this whole thing and any help anyone could give would be awesome, thanks!

推荐答案

看到这一行:

scheduler.add_job(inserttodaysdata(), 'interval', hours=1)

应该是

scheduler.add_job(inserttodaysdata, 'interval', hours=1)

您正在调用 inserttodaysdata() 并将其返回值传递给 add_job().不要那样做.传递函数本身,而不是它的调用结果.

You're calling inserttodaysdata() and passing its return value to add_job(). Don't do that. Pass the function itself, not its call result.

这篇关于Apscheduler 运行一次然后抛出 TypeError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆