GVKun编程网logo

如何逐步处理Python代码以帮助调试问题?(python调用代码)

22

本文将介绍如何逐步处理Python代码以帮助调试问题?的详细情况,特别是关于python调用代码的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Ap

本文将介绍如何逐步处理Python代码以帮助调试问题?的详细情况,特别是关于python调用代码的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Apache Spark如何处理python多线程问题?、LinkedIn 是如何逐步淘汰Python 2的?、python – 如何逐步写入json文件、Python 潮流周刊#12:Python 中如何调试死锁问题?的知识。

本文目录一览:

如何逐步处理Python代码以帮助调试问题?(python调用代码)

如何逐步处理Python代码以帮助调试问题?(python调用代码)

在Java / C#中,您可以轻松地逐步执行代码以查找可能出了问题的地方,而IDE使此过程非常人性化。

您能以类似的方式跟踪python代码吗?

答案1

小编典典

是! 有一个Python调试器pdb就是为了这样做!

你可以pdb使用pdb myscript.py或通过启动Python程序python -m pdb myscript.py

你可以执行一些命令,这些命令已在pdb页面中记录。

需要记住的一些有用的是:

  • b:设置一个断点
  • c:继续调试,直到遇到断点
  • s:单步执行代码
  • n:转到下一行代码
  • l:列出当前文件的源代码(默认值:11行,包括正在执行的行)
  • u:浏览堆栈框架
  • d:向下浏览堆栈框架
  • p:在当前上下文中打印表达式的值

如果你不想使用命令行调试器,则某些IDE(例如Pydev,Wing IDE或PyCharm)都具有GUI调试器。Wing和PyCharm是商业产品,但是Wing具有免费的“个人”版本,而PyCharm具有免费的社区版本。

Apache Spark如何处理python多线程问题?

Apache Spark如何处理python多线程问题?

根据python的GIL,我们不能在CPU绑定的进程中使用线程,所以我的问题是Apache
Spark如何在多核环境中利用python?

LinkedIn 是如何逐步淘汰Python 2的?

LinkedIn 是如何逐步淘汰Python 2的?

在 Python 2 的第一个版本发布近 20 年后,在 Python 3 的第一个版本发布 11 年后,Python 开发社区已经淘汰了 Python 2.7,这是 Python 2 系列的最后一个版本。这标志着 Python 2 所有上游支持(包括 Bug 和安全修复)的终结,并让开发人员将他们的时间和精力完全投入到 Python 3 上。Python 3 速度更快,提供了更多的一致性,并为开发人员带来了许多优秀的特性(例如,asyncio、type hinting)。

1具体的迁移过程

在 2018 年,为了全面迁移到 Python 3 代码库,LinkedIn 投入了长达多个季度的工作。在历经大约两个季度的计划和两个季度的执行后,LinkedIn 在新产品甚至现有产品的新版本中逐步淘汰了 Python 2 的使用。这次迁移是由 LinkedIn 的 Python Foundation 团队领导的,多个团队和部门扮演着一个整体的角色,以确保迁移执行的相对顺畅。这次迁移的工作总共需要迁移大约 550 个代码仓库(库、应用程序和服务)。值得赞扬的是,LinkedIn 的同事理解这次迁移的必要性,并在将 LinkedIn 的基础设施迁移至未来的过程中做出了自己的贡献。

在 LinkedIn,Python 不仅用于为 LinkedIn 的会员提供在线体验,还用于访问内部系统和服务,包括部署工具、CI/CD 框架、脚本、命令行界面、数据科学工具等。除了 Java 和 JavaScript,Python 是 LinkedIn 工程师们完成任务的关键语言。LinkedIn 并没有在其产品中使用 Python,也没有将它作为一个独立的 Web 服务来使用,而是拥有数百个独立的微服务和工具,以及数十个支持库,这些都由独立团队在单独的仓库中所拥有。这些仓库之间的关系可由复杂的依赖关系图表示。

LinkedIn 的迁移故事早在正式迁移开始之前就已经开始了。随着 Python 3 在更大的开源生态系统中变得越来越重要,LinkedIn 的大多数内部库都被移植为“双语”的,这意味着它们可以在 Python 2 或 Python 3 中使用。这一方法,长期以来一直被认为是理想的标准,因为它为这些库的使用者提供了一个平稳的过渡期。如果开发人员小心谨慎,并且库有一个非常清晰的模型,说明哪些数据是字节、哪些数据是文本(人类可读的字符串,即 Unicode),那么这也不是很难做到的事。Python 2 融合了这两个截然不同的概念,但 Python 3 迫使用户理解并明确表示文本数据模型。这是加强数据一致性和避免大多数可怕的 UnicodeError 所必需的,这些 UnicodeError 可能会困扰 Python 2 代码库。

在 LinkedIn 漫长的迁移历史中,这是成功移植所需的最关键的明确性。双语库意味着你不能充分利用 Python 3 的许多最吸引人的新特性。但是,只要 Python 2 仍然受支持,这种折衷就是值得的,因为双语库允许那些库的用户在方便的时候用最少的资源移植到 Python 3。另一方面,应用程序通常不需要使用双语,它们只在一个 Python 版本中运行,因此,它们可以利用 Python 3 的所有新特性、模块和改进。

考虑到这次迁移影响了如此众多的不同团队和数千名工程师的所有 LinkedIn 工程,这项工作是由 LinkedIn 的 Horizontal Initiative(HI)计划监督的。Python Foundation 团队充当了焦点,积极与所有工程领域的开发人员合作,分析 LinkedIn 现有的代码库。他们确定了产品所有者,创建工作单位,回答出现的问题,审查变更,并跟踪即将到来的截止日期。LinkedIn 有大约 550 个仓库需要移植,因此给了自己和合作伙伴两个季度来完成整个计划。

LinkedIn 将工作分为两个阶段进行,连续几个季度进行实施:

  • 第一个阶段: 在 2019 年第一季度,LinkedIn 执行了详细的依赖关系图的绘制,确定了一些更基础的仓库,因此需要首先进行全面的移植,因为它们会阻塞依赖它们的所有端口。其中包括一些与 Python 3 不兼容的内部库,以及没有阻塞依赖关系的应用程序(命令行工具和微服务)。这是在大约 75 个仓库中计算出来的,这在一个季度内就可以很容易完成,并为 LinkedIn 提供了许多重要的经验、反馈和信心来启动整个移植工作。

  • 第二个阶段: 在 2019 年第二季度,LinkedIn 确定了需要移植的仓库的其余部分,以及由于任何原因而错过最后期限的第一阶段仓库的任何迁移。

通过这种分阶段的方法,LinkedIn 实现了目标完工日期。LinkedIn 对构建系统进行了更改,禁用了构建 Python 2 应用程序的能力,并停止构建内部 Python 库的 Python 2 版本。

请注意,从任何双语库中删除 Python 2 支持显然不是一个目标。然而,既然 LinkedIn 已经完成了迁移,LinkedIn 的库所有者就有机会放弃 Python 2,并对他们的代码库进行现代化升级,利用任何适当的 Python 3 特性使他们的代码更具可读性或更高效。

2迁移后的反思

LinkedIn 完成多产品迁移的主要指标是成功构建并通过单元和集成测试。对于具有高覆盖率测试套件的仓库,这在实践中效果很好。但是,LinkedIn 的一些代码库的覆盖率很低。虽然通过构建和测试仍然是 LinkedIn 最好的信号,但 LinkedIn 对端口保真度的信心有时会因那些较低的测试覆盖率而削弱。

对于其他规划迁移或处于正在迁移过程中的组织,LinkedIn 提供以下指导原则:

  • 尽早计划,并请组织的 Python 专家参与进来。在受影响的团队中寻找和利用冠军,宣传 Python 3 的优势。

  • 采用双语方法来支持库,这样你的库的用户就可以按照自己的计划移植到 Python 3。

  • 投资于测试和代码覆盖率:这些将是你最好的成功指标。

  • 确保你的数据模型是明确而清晰的,特别是在识别哪些数据是字节,哪些是人类可读的文本时。

现在,LinkedIn 工程已经完全采用了 Python 3,不再需要担心是否支持 Python 2,而且 LinkedIn 的支持负载已经降低了。LinkedIn 现在可以依靠最新的开源库和工具,将自己从不得不编写双语 Python 的束缚中解放出来。LinkedIn 正在适时地、积极地采用类型提示和 mypy 类型检查器,以提高 Python 代码库的整体质量、技术和可读性。LinkedIn 目前支持 Python 3.6 和 3.7,并计划在 2020 年初支持 Python 3.8。

python – 如何逐步写入json文件

python – 如何逐步写入json文件

我正在编写一个程序,它要求我生成一个非常大的json文件.我知道传统的方法是使用json.dump()转储字典列表,但是列表太大了,即使总内存交换空间在转储之前也无法保存它.无论如何将它流式传输到json文件中,即将数据逐步写入json文件?

解决方法

我知道这已经晚了一年,但问题仍然存在,我很惊讶 json.iterencode()没有被提及.

在这个例子中,iterencode的潜在问题是你希望通过使用生成器对大数据集进行迭代处理,而json编码不会序列化生成器.

解决这个问题的方法是子类列表类型并覆盖__iter__魔术方法,以便您可以生成生成器的输出.

以下是此列表子类的示例.

class StreamArray(list):
    """
    Converts a generator into a list object that can be json serialisable
    while still retaining the iterative nature of a generator.

    IE. It converts it to a list without having to exhaust the generator
    and keep it's contents in memory.
    """
    def __init__(self,generator):
        self.generator = generator
        self._len = 1

    def __iter__(self):
        self._len = 0
        for item in self.generator:
            yield item
            self._len += 1

    def __len__(self):
        """
        Json parser looks for a this method to confirm whether or not it can
        be parsed
        """
        return self._len

从这里开始使用非常简单.获取生成器句柄,将其传递到StreamArray类,将流数组对象传递给iterencode()并迭代块.块将是json格式输出,可以直接写入文件.

用法示例:

#Function that will iteratively generate a large set of data.
def large_list_generator_func():
    for i in xrange(5):
        chunk = {'hello_world': i}
        print 'Yielding chunk: ',chunk
        yield chunk

#Write the contents to file:
with open('/tmp/streamed_write.json','w') as outfile:
    large_generator_handle = large_list_generator_func()
    stream_array = StreamArray(large_generator_handle)
    for chunk in json.JSONEncoder().iterencode(stream_array):
        print 'Writing chunk: ',chunk
        outfile.write(chunk)

显示产量和写入的输出连续发生.

Yielding chunk:  {'hello_world': 0}
Writing chunk:  [
Writing chunk:  {
Writing chunk:  "hello_world"
Writing chunk:  : 
Writing chunk:  0
Writing chunk:  }
Yielding chunk:  {'hello_world': 1}
Writing chunk:,Writing chunk:  {
Writing chunk:  "hello_world"
Writing chunk:  : 
Writing chunk:  1
Writing chunk:  }

Python 潮流周刊#12:Python 中如何调试死锁问题?

Python 潮流周刊#12:Python 中如何调试死锁问题?

查看全文: https://pythoncat.top/posts/2023-07-22-weekly

文章&教程

1、使用 PyStack 调试 Python 中的崩溃和死锁 (英)

2、介绍一个 FastAPI 项目模板 (英)

3、Python FastAPI 微服务与 Polylith 架构 (英)

4、Python日志模块:实战应用与最佳实践

5、测量 Python 和 Rust 异步 Web 服务的性能 (英)

6、dinov2_retrieval:一个基于 DINOv2 的图片检索应用

7、隐藏在 Python 标准库中的 CLI 工具 (英)

8、如何在 Python 项目中使用 TailwindCSS ? (英)

9、Python 元编程实用指南 (英)

10、CPython 是如何打印堆栈信息的? (英)

11、用于路径操作的 Pathlib (英)

12、Stack Overflow、Shopify 及 Levels.fyi 的软件架构 (英)

13、10 条编写干净 Python 代码的建议 (英)

14、Meta 开发者工具:支撑大规模协作的编程体系 (英)

️项目&资源

1、GitHub 上有哪些值得推荐学习的 Python 项目? (英)

2、python-cheatsheet: Python 知识点速查表 (英)

3、pandora:潘多拉,一个让你呼吸顺畅的ChatGPT

4、py4web:数据库驱动的 Web 开发框架 (英)

5、FastAPI-Vue-Admin:基于 FastAPI+Vue 的敏捷开发框架

6、ChatALL:同时与ChatGPT、Bing Chat、Bard、Alpaca、Claude、讯飞星火、文心一言等聊天

7、vectordb:一个 Python 向量数据库 (英)

8、python-sortedcontainers:有序容器类型(有序列表、有序字典和有序集合) (英)

9、quart:一个支持异步的 Python Web 框架 (英)

10、ShortGPT:自动生成短视频内容的 AI 框架 (英)

播客&视频

1、捕蛇者说 Ep 41:和 Penguin 聊聊 CPython 优化和大厂编译器组的工作

2、The Python Show 07 - 访谈 Robyn Web 框架的作者 (英)

3、2023 年 Python 网络大会的 80 个视频 (英)

4、关于 AI 内容:推荐 6 个 YouTube 频道 (英)

5、除你武器 013|我也不想工作啊,只是想找个岸上一上

查看全文: https://pythoncat.top/posts/2023-07-22-weekly

往期内容: https://pythoncat.top/tags/weekly

我们今天的关于如何逐步处理Python代码以帮助调试问题?python调用代码的分享已经告一段落,感谢您的关注,如果您想了解更多关于Apache Spark如何处理python多线程问题?、LinkedIn 是如何逐步淘汰Python 2的?、python – 如何逐步写入json文件、Python 潮流周刊#12:Python 中如何调试死锁问题?的相关信息,请在本站查询。

本文标签: