Python 重新加载线程安全吗?

Is Python reload thread safe?

使用python,我正在写一个讨厌的爬虫系统,从每个地方政府的网站上爬取一些东西,网站总数超过100个,以防万一他们的网页发生变化,我必须使用重新加载做热更新。但我想知道重新加载是否是线程安全的。因为说,我正在线程 1 中重新加载 moudle Cralwer1,但与此同时,线程 2 正在使用 Cralwer1。线程 1 的重新加载会导致线程 2 失败吗?如果是这样,我必须做一个锁什么的,否则,我可以愉快地重新加载而不需要额外的工作。谁能帮我吗?

reload = 重新执行 Crawler1 中的顶级代码。

一般来说没有更多info/code样本,你可以:

  • 封装 "operational" 启动程序的顶级代码,例如将它放在函数或 class 中,然后调用它而不是重新加载整个模块。这可能涉及calling/adding一些清理功能。

  • 使用一个全局变量,thread1和thread2会翻转并注意防止相互踩踏。这并不能很好地扩展,但也许可以 prevent/delay 使用锁。

  • 使用锁其实并不难, 他们甚至支持上下文管理器: https://docs.python.org/3/library/threading.html#with-locks

Is Python reload thread safe?

没有

reload() 执行模块中的所有纯 python 代码。任何纯 python 步骤都可以随时切换线程。所以,这绝对不安全。