Python 递归限制

2023-12-01

所以我理解递归限制为1000的原因。我想连续运行一个脚本,但我是否正确理解最终会达到递归限制(即使我将其设置得更高)并且Python会崩溃?

在计划中,这没什么大不了的,因为我可以让操作系统继续重新启动脚本,但我认为可能有一个更优雅的解决方案可以在脚本本身中使用(交换线程??)。

我的脚本:

import os
import subprocess
import time
import logging
import datetime
from sys import argv

if len(argv) < 3:
    exit('Please provide two arguments - Source Destination')


LOC_DIR = argv[1]
REM_DIR = argv[2]

POLL_INT = 10
RUN_INT = 60
FILE_EXT = '.mov'


# logging setup
logging.basicConfig(filename='%s' % os.path.join(LOC_DIR, '%s the_log.log' % datetime.datetime.now()),level=logging.DEBUG)

# make an easy print and logging function
def printLog(string):
    print '%s %s' % (datetime.datetime.now(), string)
    logging.info('%s %s' % (datetime.datetime.now(), string))


# get the files with absolute paths
def getFiles(path):
    return [os.path.join(path, entry) for entry in os.listdir(path)]


# check if file is still being copied (file size has changed within the poll interval)
def checkSize(path):
    same = False
    while same is False:
        printLog("Processing '%s'" % os.path.basename(path))
        printLog('Waiting %s seconds for any filesize change' % POLL_INT)
        size1 = os.path.getsize(path)
        time.sleep(POLL_INT)
        size2 = os.path.getsize(path)
        if size1 == size2:
            same = True
            printLog('File size stayed the same for %s seconds' % POLL_INT)
            return same
        else:
            printLog('File size change detected. Waiting a further %s seconds' % POLL_INT)


# check if correct file extension
def checkExt(path):
    if path.endswith(FILE_EXT):
        return True


# rsync subprocess
def rsyncFile(path):
    printLog("Syncing file '%s'" % os.path.basename(path))
    try:
        command = ['rsync', '-a', '--remove-source-files', path, REM_DIR]
        p = subprocess.Popen(command, stdout=subprocess.PIPE)
        for line in p.stdout:
            printLog("rsync: '%s'" %line)
        p.wait()
        if p.returncode == 0:
            printLog('<<< File synced successfully :) >>>')
        elif p.returncode == 10:
            printLog('****** Please check your internet connection!! ******  Rsync error code: %s' % p.returncode)
        else:
            printLog('There was a problem. Error code: %s' % p.returncode)
    except Exception as e:
        logging.debug(e)


# main logic
def main():
    all_files = getFiles(LOC_DIR)
    files = []
    for f in all_files:
        if checkExt(f):
            files.append(f)
    if len(files) == 1:
        printLog('<<< Found %s matching file >>>' % len(files))
    elif len(files) > 1:
        printLog('<<< Found %s matching files >>>' % len(files))
    for f in files:
        if checkSize(f):
            rsyncFile(f)
    printLog('No files found.  Checking again in %s seconds' % RUN_INT)
    time.sleep(RUN_INT)
    printLog('Checking for files')
    main()

if __name__ == "__main__":


    main()

CPython 没有对递归进行优化,因此您确实希望避免使用深度递归代码,而转而使用常规循环:

def main():
    while True:
        all_files = getFiles(LOC_DIR)
        files = []
        for f in all_files:
            if checkExt(f):
                files.append(f)
        if len(files) == 1:
            printLog('<<< Found %s matching file >>>' % len(files))
        elif len(files) > 1:
            printLog('<<< Found %s matching files >>>' % len(files))
        for f in files:
            if checkSize(f):
                rsyncFile(f)
        printLog('No files found.  Checking again in %s seconds' % RUN_INT)
        time.sleep(RUN_INT)
        printLog('Checking for files')

if __name__ == "__main__":    
    main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 递归限制 的相关文章

随机推荐

  • TensorFlow的目标剪枝找不到节点

    我使用 TensorFlow API 编写了一个 Python 脚本 其中包括SummaryWriter它会转储图形定义 以便我可以在 TensorBoard 中查看它 运行脚本时 会出现一个NotFoundError被抛出说PruneFo
  • 进程无法访问该文件,因为该文件正在被另一个进程使用

    我正在使用 ASP NET Webforms 和 C 在一页上 我单击 提交 以在服务器上创建一个文件 File Create Server MapPath ConfigurationManager AppSettings LandingP
  • 切换位置根据滚动位置固定

    我有以下代码 它修复了菜单将要滚动到页面顶部的位置 function var msie6 browser msie browser version lt 7 if msie6 var top menu offset top parseFlo
  • Selenium-Python:与系统模式对话框交互

    我正在浏览器中运行一个应用程序 对于某些动作 我能够通过击键来模拟动作 但我有一个特殊的问题 我的应用程序中的某些操作会导致系统提示弹出 例如保存或确认退出 有没有办法在 Selenium python 中控制这些 例如想象一下使用按键来保
  • 如何用动画画线?

    我已经实现了游戏应用程序 我想在两个对象之间画线 我已经在两个对象之间画线 但是我想用动画绘制 你能告诉我在两点之间必须使用哪个动画吗 编辑 我的确切问题是 假设有两个点 如起点 100 100 和终点 300 300 我可以在这两点之间画
  • 在 UITableView 中执行 commitEditingStyle 时,如何制作“删除按钮”的自定义视图

    我想自定义在表格视图单元格上执行 向左滑动 操作时显示的删除按钮 我当前设置了 UITableViewCell 的子类 但也想自定义正在显示的删除按钮 我的目标是在滑动时放置三个按钮 我选择另一种实现 在每个单元格中使用 UIScrollv
  • 如何使用 SQLAlchemy 连接 Windows 10 中 Docker 上的 Postgres 数据库?

    我使用 Docker 和以下命令在我的计算机上设置了一个临时 Postgres 数据库用于测试目的 1 sudo docker run name some postgres6 e POSTGRES PASSWORD mysecretpass
  • 如何跳转到 GDB 中 std::function 内保存的函数,同时跳过所有内部实现?

    采取这个代码 include
  • 将 StripeLine 放在系列顶部(调整 Z 索引/Z 顺序)

    我正在构建一个柱形图System Web UI DataVisualization Charting并希望显示一条虚线来代表平均值 条纹线似乎正是我正在寻找的东西 除了它位于列的下面 后面 参见示例 有没有办法调整 Z Index Stri
  • 在kannel中发送阿拉伯短信

    我正在尝试从 kannel 发送阿拉伯短信 或法语短信 但它没有完美地到达客户端 有时阿拉伯语单词是 在对 bearbox smsbox 和 smsc 之间发送的值进行一些分析后 我发现编码错误发生在我的 bearbox 和 smsbox
  • Windows 上每个 Java 进程的最大内存量?

    在 32 位 Windows 上可以为 Java 进程分配的最大堆大小是多少 Xmx 我这样问是因为我想使用 ETOPO1 数据OpenMap原始二进制浮点文件约为 910 MB 没有什么比实证实验更好地回答你的问题了 我编写了一个 Jav
  • Java 在字符串中查找单词

    我需要在 HTML 源代码中找到一个单词 我还需要计算出现次数 我正在尝试使用正则表达式 但它说找到 0 个匹配项 我使用正则表达式 因为我认为这是最好的方法 如果有更好的方法 请告诉我 我需要在 HTML 源代码中查找单词 hsw ads
  • 从串行端口读取数据以及向串行端口发送数据

    我正在尝试进行串行端口通信来发送和接收数据 这是场景 我连接到串行端口并启动我的设备 当它倒计时做某事时 我应该暂停它并向它发送一些命令来工作 它完成了所有工作 然后再次开始继续 现在我通过互联网搜索 c 适合我 这样做时你能给我什么建议吗
  • 对属性设置器的方法引用

    在不使用 kotlin reflect 的情况下 如何获取对属性设置器的方法引用 基本上 如果我用 java 方式编写代码 那就非常简单 fun setValue i Int Unit val a Int gt Unit this setV
  • 使用表达式确定字符串是否以字母开头

    我需要一些帮助在 SSIS 表达式中构建条件语句 该语句将允许我过滤出必须始终以两个字母字符开头的 9 位 varchar 字段 模式应始终遵循 AA0000000 我的目标是让数据流达到条件分割并将非法记录转储到转储文件中以供以后进行质量
  • 如何在 sklearn 中使用 SVC 运行 RFECV

    我正在尝试使用交叉验证 RFECV 执行递归特征消除GridSearchCV如下使用SVC作为分类器 我的代码如下 X df my features y df gold standard x train x test y train y t
  • 当构建失败时在不同的项目中创建错误

    We have setup a build definition which creates a bug and assigns it to requestor incase the build fails See below 默认情况下
  • 如何以编程方式检查页面的 url 是否正在重定向?

    我正在尝试提取网页 A 的内容 使用 groovy 我尝试了以下操作 String urlStr url of webpage A String pageText urlStr toURL text println pageText 上面的
  • iOS 中的 React Native fbsdk

    当我在项目中添加 fbsdk 时 出现如下错误 警告 RCTFBLikeView 的本机组件不存在 2016 06 21 22 27 38 898 警告 tid com facebook react JavaScript 警告 RCTFBL
  • Python 递归限制

    所以我理解递归限制为1000的原因 我想连续运行一个脚本 但我是否正确理解最终会达到递归限制 即使我将其设置得更高 并且Python会崩溃 在计划中 这没什么大不了的 因为我可以让操作系统继续重新启动脚本 但我认为可能有一个更优雅的解决方案