pyspider icon indicating copy to clipboard operation
pyspider copied to clipboard

from porjects import utils 没有更新

Open leftluoyi opened this issue 5 years ago • 1 comments

根据官方文档采用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()则没有问题。

刚才试了一下,重启整个集群能够暂时解决问题。但每次更新代码就重启实在不太方便。

leftluoyi avatar Jun 17 '19 09:06 leftluoyi

刚好也遇到这个问题. 原因大概就是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)

RonnieHwang avatar Aug 07 '19 06:08 RonnieHwang