pyspider
pyspider copied to clipboard
from porjects import utils 没有更新
根据官方文档采用docker-compose搭建了分布式的pyspider。
建立了一个utils
工程打算将一些常用的函数放进去,比如generate_id()。最初建立utils
工程的时候,在generate_id()
函数中只有一句测试用的return "Hello"
。后来在generate_id()
函数中加入了代码之后,在别的模块中调用generate_id()函数,无论任何情况只返回"Hello"。在utils
中加入新的函数,这些新的函数在别的模块中调用时也显示module 'projects.utils' has no attribute 'xxx'
。
如果在utils中调用自己的函数比如generate_id()
则没有问题。
刚才试了一下,重启整个集群能够暂时解决问题。但每次更新代码就重启实在不太方便。
刚好也遇到这个问题. 原因大概就是projects.* 这类代码是以MetaPathFinder InspectLoader的形式分别加入到webui, procesoor的sys.meta_path中, 所以你会发现在单步调试和正式运行时的结果也许会不一样. 但是你的结论没错, 除非重启整个框架, 否则后续修改不会生效.
我的解决方案 这类module引用不要用 from projects import xx 而自己从projectdb中读代码编译.
module = ProjectLoader({'name': module_name, 'status': 'DEBUG' , 'script': script}).load_module(module_name)