分享给大家一段轮询整个表的代码,经测试可用:

def queryAllWithHandler(className, handler):
    """遍历表里所有数据,并对数据执行handler(data)
    具体实现是根据createdAt时间排序,先查询并处理最早建立的数据(因此支持在操作未完成时若手动添加了新数据)
    """
    Class = leancloud.Object.extend(className)
    query = Class.query
    allDataCompleted = False
    batch = 0
    limit = 1000
    while not allDataCompleted:
        query.limit(limit)
        query.skip(batch * limit)
        query.add_ascending('createdAt')
        resultList = query.find()
        if len(resultList) < limit:
            allDataCompleted = True
        for data in resultList:
            handler(data)
        batch += 1

这段代码我是放在云函数中并由云函数的方式调用的,虽然测试了一下比较顺利,但我有一点疑问:当工作线程数太多、或者请求数过多的时候,不知道会不会导致操作中断?

是指执行过程中,抛出异常,然后遍历就停止了吗?似乎可以考虑在循环提中增加 try ... except 语句,捕获这个异常,然后 sleep 一小会,然后重新执行当前循环。

我自己还没遇到过,就是不太会写健壮的try...except所以才有这个疑问。目前如果执行时是大量的耗时操作,感觉服务器会把那些请求都放在一个队列里一直执行,直到全部完成。虽然我还没遇到,但中间如果会有异常,估计是会中断的。

要保证这个函数一定正确执行完成,难道是要用while循环把try...except包含在其中,只要except了就重新执行直到没出错?

终于找到一个python的查询了