wks*_*rtz 8 python import monkeypatching multiprocessing python-3.x
当模块A的函数应该是可导入的时候,如何从模块B中获取补丁模块A,以便我可以使用multiprocessing
标准库包运行模块A的函数?
客户端请求了一个不适用于我们任何其他客户端的修补程序,因此我创建了一个新分支,并为它们编写了一个单独的模块,以便从主分支中轻松合并更改.为了保持客户端与预修复程序行为的向后兼容性,我在应用程序中将此修补程序实现为可配置设置.因此,我不想替换旧代码 - 只需在打开设置时对其进行修补即可.我通过猴子修补做到了这一点.
该__main__
模块读入配置文件.如果配置打开了修补程序的开关,则通过用模块中定义的代码替换几个函数来__main__
修补我engine
的hotfix
模块 - 实质上,被替换的函数是最大化函数的关键函数.该engine
模块稍后会加载一个工作池multiprocessing
.
一旦multiprocessing
工作人员开始工作,第一件事multiprocessing
就是重新导入*engine
模块并查找__main__
试图替换的关键功能(然后multiprocessing
将控制交给我的代码并开始最大化算法).由于engine
正在通过一个全新的流程重新导入,并且新流程不会重新运行__main__
(配置文件被读取的地方)因为这会导致无限循环,所以它不知道重新进行猴子补丁engine
.
如何在代码中保持模块化(即,将修补程序代码保存在单独的模块中)并仍然利用Python的multiprocessing
包?
*注意我的代码必须在Windows(对我的客户端)和Unix(为了我的理智......)上工作
听起来您将不得不修改engine.py
以检查配置文件,并在需要时对其进行修补。
要在unix和Windows上工作,engine
可以保留一个全局CONFIG_DONE
变量来决定是否需要再次检查配置文件。
归档时间: |
|
查看次数: |
437 次 |
最近记录: |