挂钩Python标准库模块

时间:2011-09-22 02:49:38

标签: python multithreading import python-3.x

问题

我为Python编写了一个替换threading模块。使用我自己的标准库挂钩常用threading模块的所有用法的最佳方法是什么?挂钩应该是选择加入,并且是按项目或按可执行的基础。

执行此语句时:

import threading

我希望加载模块而不是默认模块。

请注意,将来我也可能会挂钩其他几个标准模块,因此解决几个模块的问题最好。

为什么

我通过greenlet和Linux的eventfd()epoll()系统调用实现了IO并发。除了sys.modules钩子和替换socket类之外,它透明地工作。希望使这个钩子更好,更一致。

2 个答案:

答案 0 :(得分:3)

您是否可以将替换threading模块放在某个目录中,并确保在您想要使用该目录时列在PYTHONPATH中?这应该意味着在导入threading时在默认位置之前搜索目录,Python将找到你的模块并停止。

答案 1 :(得分:3)

您可以尝试使用python的meta_path hook:

http://www.python.org/dev/peps/pep-0302/

它允许您添加一个可以覆盖部分导入过程的对象。我认为你可以用这种方式用你自己的模块代替标准模块。我不确定它比修补sys.modules更好。