Python重载线程安全吗?

时间:2017-07-18 02:00:21

标签: python multithreading thread-safety python-import reload

使用python,我正在编写一个令人讨厌的cralwer系统,它可以从每个地方政府的网站上获取一些内容,而且总的网站数量超过100个,以防万一他们的网页发生变化,我必须使用重新加载来进行热更新。但我想知道重载是否是线程安全的。因为说,我在线程1中重新加载moudle Cralwer1,但同时,线程2正在使用Cralwer1。线程1重新加载会导致线程2失败吗?如果是这样,我必须做一个锁或什么的,否则,我很乐意在没有额外工作的情况下重新加载。谁能帮我吗?

2 个答案:

答案 0 :(得分:1)

  

Python重载线程是否安全?

没有

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

答案 1 :(得分:0)

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

一般来说,如果没有更多信息/代码示例,您可以:

  • 封装解决问题的“可操作”顶级代码,例如:把它放在一个函数或一个类中,并调用它而不是重新加载整个模块。这可能涉及调用/添加一些清理功能。

  • 使用全局变量,thread1和thread2将翻转并注意防止相互踩踏。这不能很好地扩展,但可能会阻止/延迟锁的使用。

  • 使用锁实际上并不那么难, 他们甚至支持情境管理员: https://docs.python.org/3/library/threading.html#with-locks