2017-07-18 88 views
1

使用python,我写了一个令人讨厌的cralwer系统,从每个地方政府的网站提供一些东西,并且总的网站数超过100,以防万一他们的网页改变了,我不得不使用重新加载来进行热更新。但我想知道如果重新加载是线程安全的。因为我说,我正在线程1中重新加载模块Cralwer1,但同时线程2正在使用Cralwer1。线程1的重新加载是否会导致线程2失败?如果是这样,我必须做一个锁或什么,否则,我可以愉快地做没有额外的工作重新加载。谁能帮我吗?Python重新加载线程安全吗?

+0

你为什么使用'reload'呢? – user2357112

+0

用于热更新。 –

回答

1

是Python的重载线程安全的?

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

0

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

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

  • 封装该踢的东西掉了“操作”顶级代码,例如把它放在函数或类中,然后调用它而不是重新加载整个模块。这可能涉及调用/添加一些清理功能。

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

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