You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调度Colab笔记本每6小时将Google Drive新增文件同步至GCS

如何调度Colab笔记本每6小时执行一次Drive到GCS的文件同步任务

Colab本身没有内置定时调度功能,且会话存在时长限制,以下是两种可行的实现方案:

方案1:转换为Google Cloud Function + Cloud Scheduler(推荐)

这是最稳定的长期定时方案,云函数在GCP服务器端运行,不受Colab会话限制。

实现步骤:

  1. 启用必要API:在GCP控制台启用Google Drive API和Cloud Storage API。
  2. 编写云函数代码:将Colab中的同步逻辑改写为云函数,同时添加增量同步的时间过滤逻辑(避免重复复制):
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseDownload
from google.cloud import storage
import io
from datetime import datetime

def sync_drive_to_gcs(event, context):
    # 初始化Drive和GCS客户端
    drive_service = build('drive', 'v3')
    storage_client = storage.Client(project='dev-project')
    bucket = storage_client.bucket('your-bucket-name')  # 替换为你的存储桶名称

    # 替换为Drive中test文件夹的ID(可通过Drive网页端获取)
    target_folder_id = 'YOUR_DRIVE_TEST_FOLDER_ID'
    
    # 获取上次同步时间(存储在GCS的文件中)
    last_sync_blob = bucket.blob('last_sync_timestamp.txt')
    last_sync_time = last_sync_blob.download_as_text() if last_sync_blob.exists() else '1970-01-01T00:00:00Z'

    # 查询Drive文件夹中未被删除且修改时间晚于上次同步的文件
    file_list = drive_service.files().list(
        q=f"'{target_folder_id}' in parents and trashed=false and modifiedTime > '{last_sync_time}'",
        fields="files(id, name, modifiedTime)"
    ).execute().get('files', [])

    # 同步符合条件的文件到GCS
    for file in file_list:
        # 下载Drive文件到内存
        file_io = io.BytesIO()
        downloader = MediaIoBaseDownload(file_io, drive_service.files().get_media(fileId=file['id']))
        done = False
        while not done:
            status, done = downloader.next_chunk()
        
        # 上传到GCS
        gcs_blob = bucket.blob(file['name'])
        file_io.seek(0)
        gcs_blob.upload_from_file(file_io)
        print(f"已同步文件: {file['name']}")

    # 更新上次同步时间为当前UTC时间
    current_timestamp = datetime.utcnow().isoformat() + 'Z'
    last_sync_blob.upload_from_string(current_timestamp)
  1. 部署云函数:在GCP控制台创建云函数,选择Python 3.9+运行时,粘贴上述代码,添加依赖包google-api-python-client和google-cloud-storage,配置服务账号权限(需包含Drive文件读取和GCS写入权限)。
  2. 创建定时触发任务:在GCP Cloud Scheduler中创建任务,设置触发频率为0 */6 * * *(每6小时一次),目标类型选择HTTP,指向云函数的触发URL,认证方式选择服务账号。

方案2:外部工具触发Colab(临时场景适用)

此方案依赖Colab的会话存活,稳定性较差,仅适合临时测试:

  1. 防止Colab会话休眠:在Colab笔记本中添加以下代码单元格并运行,每隔1分钟点击一次连接按钮维持会话:
function keepAlive() {
  console.log("维持会话连接");
  document.querySelector("#top-toolbar > colab-connect-button").click();
}
setInterval(keepAlive, 60000);
  1. 外部定时触发:使用Windows任务计划、Linux Cron或第三方定时工具,通过Colab的共享链接自动化方式定时触发笔记本运行。注意:Colab会话最长约12小时,且可能因空闲被强制断开。

内容的提问来源于stack exchange,提问作者Sana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 18:33:35