如何让基于tweepy的Twitter Bot每24小时自动循环发推
Tweepy Twitter Bot 24小时自动运行实现方案
现有代码的核心问题
当前脚本执行完一次postKasumi推送流程后就会走到主逻辑末尾退出进程,既没有循环触发的逻辑,也没有间隔等待的设计,因此只能发一次就停止运行。可以根据自己的部署场景选择下面两种改造方案。
方案1:代码内置常驻循环,零额外工具部署
直接修改main函数的逻辑,加入死循环、异常捕获、固定间隔等待的逻辑,不需要依赖外部系统工具,跑一次脚本就能持续按间隔推送:
def main(): api = create_api() # 设置推送间隔:24小时 = 86400秒 PUSH_INTERVAL = 24 * 60 * 60 while True: try: # 执行推送逻辑 postKasumi(api) except Exception as push_err: # 捕获单次推送的所有异常,避免进程因为单次报错直接崩溃退出 logger.error(f"本次推送执行失败:{str(push_err)}") # 等待设定的间隔时间后进入下一轮循环 logger.info(f"将在{PUSH_INTERVAL//3600}小时后执行下一次推送") time.sleep(PUSH_INTERVAL)
这个方案的注意点
- 必须保留异常捕获逻辑:Twitter接口偶发限流、本地网络临时波动都是常见问题,如果没有捕获,单轮报错就会导致整个常驻进程直接终止
- 这种运行方式需要保证运行脚本的设备(本地电脑、云服务器)全程不关机、进程不被意外杀掉,一旦进程中断就会停止推送
- 原代码中切换工作目录的逻辑要保留,避免脚本在定时触发时找不到相对路径下的图片、配置文件资源
补充:如果你的推送内容需要附带本地图片,可以在
postKasumi函数里调整接口调用逻辑,解决原代码仅发文字的问题:def postKasumi(api): logger.info("Generating image...") randomNum = random.randint(0,len(sourceimg)-1) img_path = sourceimg[randomNum] logger.info("Uploading image...") # 先上传本地图片,获取媒体ID media = api.media_upload(filename=img_path) # 发推时带上上传的媒体ID api.update_status(status="#Anime " + sourceimg.get(randomNum), media_ids=[media.media_id_string]) logger.info("Done!")
方案2:系统定时任务触发,长期稳定性更高
如果不想让Python进程一直常驻占用资源,可以把脚本改回「单次执行完就退出」的原始版本(不需要循环和sleep逻辑),直接用操作系统自带的定时调度能力,设置每24小时自动唤醒一次脚本运行:
- Windows 系统:通过「任务计划程序」新建定时任务,设置触发器为每日固定时间,执行操作选择对应Python解释器调用你的脚本
- Linux/Mac 系统:通过crontab配置定时规则,到点自动执行脚本,不需要手动保持Python进程运行
这个方案的注意点
- 配置定时任务时一定要填写脚本的绝对路径,不要用相对路径,避免系统调度时找不到脚本位置
- 相比常驻循环,这种方式的抗干扰性更强:哪怕服务器重启、之前的进程意外中断,系统定时任务到点依然会自动拉起脚本执行,不需要人工重启
内容的提问来源于stack exchange,提问作者Diogo O. Souza
相关产品推荐
相关产品推荐

