Event.INIT Event.COMPLETE 区别

本文介绍如何使用Flash中的Loader类加载图片资源,并探讨了Event.INIT与Event.COMPLETE两种事件的区别及应用。文章还提供了代码示例,展示如何正确访问加载后的资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   package{  
    import flash.display.*;  
    import flash.events.Event;  
    import flash.net.URLRequest;  
    public class LoadJPG extends Sprite{  
     private var myLoader:Loader;  
     public function LoadJPG(){  
      myLoader=new Loader();  
      myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeListener);  
     myLoader.contentLoaderInfo.addEventListener(Event.INIT,initListener);  
     myLoader.load(new URLRequest("fengjing.jpg"));  
    }//end of constructor function LoadJPG  
    private function completeListener(e:Event):void{  
     trace("This is from Event.COMPLETE listener");  
     trace(myLoader.content.width);  
     trace(myLoader.getChildAt(0).height);  
     trace(e.target.content.rotation);  
     trace("添加到显示列表前 : ",myLoader.numChildren);//1  
     addChild(myLoader.content);  
     trace("添加到显示列表后 : ",myLoader.numChildren);//0  
    }//end of function completeListener  
    private function initListener(e:Event):void{  
     trace("This is from Event.INIT listener");  
     trace(myLoader.content.width);  
     trace(myLoader.getChildAt(0).height);  
     trace(e.target.content.rotation);            
    }//end of function initListener  
   }//end of class LoadJPG   
  }//end of package  
 

例如,在加载影片或动画的第一帧时将调度 Event.INIT。然后,影片将可供访问并可添加到显示列表中。不过,下载完整的影片可能需要花更长的时间。只有在加载了完整的影片之后才会调度 Event.COMPLETE。

init 事件始终在 complete 事件之前。

访问用Loader加载进来的显示资源的时候,通常有3种办法,比如,myLoader是Loader类型的实例,要访问其加载的内容,可以这样:

1,myLoader.content;//直接访问实例的content

2,myLoader.getChildAt(0);//被加载的资源是myLoader的唯一孩子

3,e.target.content;//在侦听函数里面通过事件的目标对象访问

如果要为Loader添加侦听,必须通过Loader的实例变量contentLoaderInfo注册,contentLoaderInfo变量提供了对它装载资源的LoaderInfo对象的一个引用。而不能直接在Loader的实例上添加侦听!

以下代码简单展示了访问装载资源对象的方法和添加侦听的方法,有一个小疑惑啊,事件类型Event.COMPLETE和Event.INIT有什么区别,只知道前者是在加载结束之后触发,后者是在加载初始化后触发。牢记一点Event.COMPLETE永远发生的比Event.INIT晚 ,所以是不是在更多的情况下考虑使用Event.COMPLETE?

参考书对Event.INIT的解释如下

1, 对位图而言,实例化发生于当外部文件已经完全装载的时候。在那个时期,被装载的像素数据自动地被放置在一个BitmapData对象中,然后它被关联于一 个新的Bitmap对象,改Bitmap对象表示被装载的图像。(是不是对位图而言Event.INIT跟Event.COMPLETE是一样的?)

2,对于swf文件,实例化发生于当在帧1的所有资源和类(包括.swf的主类)已经被接收到的时候。在那个时期,ActionScript创建.swf主类的一个实例,并执行它的构造器。该主类实例表示被装载的.swf文件。

注 意,千万不要在初始化完成之前(Event.INIT触发之前)或者加载完成之前(Event.COMPLETE触发之前)试图访问被加载的资源。此时会 报错,如果用myLoader.content访问,content此时为空,如果用myLoader.getChildAt(0)访问则报错,错误 为:RangeError:Error #2006

当被装载的资源对象添加到一个新的DisplayObjectContainer中,被装载的资源自动从它原来的父亲容器Loader对象中移除!

 

STARTUP_MSG: build = git@github.com:apache/hadoop.git -r bd8b77f398f626bb7791783192ee7a5dfaeec760; compiled by 'root' on 2024-03-04T06:35Z STARTUP_MSG: java = 1.8.0_171 ************************************************************/ 2025-06-14 20:19:00,042 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: registered UNIX signal handlers for [TERM, HUP, INT] 2025-06-14 20:19:00,799 INFO org.apache.hadoop.yarn.server.resourcemanager.RMNMInfo: Registered RMInfo MBean 2025-06-14 20:19:00,819 INFO org.apache.hadoop.conf.Configuration: found resource core-site.xml at file:/export/servers/hadoop-3.4.0/etc/hadoop/core-site.xml 2025-06-14 20:19:00,924 INFO org.apache.hadoop.conf.Configuration: found resource resource-types.xml at file:/export/servers/hadoop-3.4.0/etc/hadoop/resource-types.xml 2025-06-14 20:19:00,925 INFO org.apache.hadoop.yarn.util.resource.ResourceUtils: Adding resource type - name = resource1, units = G, type = COUNTABLE 2025-06-14 20:19:00,926 INFO org.apache.hadoop.yarn.util.resource.ResourceUtils: Adding resource type - name = resource2, units = , type = COUNTABLE 2025-06-14 20:19:00,999 INFO org.apache.hadoop.conf.Configuration: found resource yarn-site.xml at file:/export/servers/hadoop-3.4.0/etc/hadoop/yarn-site.xml 2025-06-14 20:19:01,008 INFO org.apache.hadoop.yarn.metrics.GenericEventTypeMetrics: Registering GenericEventTypeMetrics 2025-06-14 20:19:01,012 INFO org.apache.hadoop.yarn.metrics.GenericEventTypeMetrics: Registering GenericEventTypeMetrics 2025-06-14 20:19:01,014 INFO org.apache.hadoop.yarn.metrics.GenericEventTypeMetrics: Registering GenericEventTypeMetrics 2025-06-14 20:19:01,015 INFO org.apache.hadoop.yarn.metrics.GenericEventTypeMetrics: Registering GenericEventTypeMetrics 2025-06-14 20:19:01,017 INFO org.apache.hadoop.yarn.event.AsyncDispatcher: Registering class org.apache.hadoop.yarn.server.resourcemanager.RMFatalEventType for class org.apache.hadoop.yarn.server.resourcemanager.ResourceManager$RMFatalEventDispatcher 2025-06-14 20:19:01,410 INFO org.apache.hadoop.yarn.server.resourcemanager.security.NMTokenSecretManagerInRM: NMTokenKeyRollingInterval: 86400000ms and NMTokenKeyActivationDelay: 900000ms 2025-06-14 20:19:01,420 INFO org.apache.hadoop.yarn.server.resourcemanager.security.RMContainerTokenSecretManager: ContainerTokenKeyRollingInterval: 86400000ms and ContainerTokenKeyActivationDelay: 900000ms 2025-06-14 20:19:01,435 INFO org.apache.hadoop.yarn.server.resourcemanager.security.AMRMTokenSecretManager: AMRMTokenKeyRollingInterval: 86400000 ms and AMRMTokenKeyActivationDelay: 1350000 ms 2025-06-14 20:19:01,582 INFO org.apache.hadoop.yarn.event.AsyncDispatcher: Registering class org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStoreEventType for class org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore$ForwardingEventHandler 2025-06-14 20:19:01,587 INFO org.apache.hadoop.yarn.event.AsyncDispatcher: Registering class org.apache.hadoop.yarn.server.resourcemanager.NodesListManagerEventType for class org.apache.hadoop.yarn.server.resourcemanager.NodesListManager 2025-06-14 20:19:01,587 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Using Scheduler: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler 2025-06-14 20:19:01,697 INFO org.apache.hadoop.yarn.metrics.GenericEventTypeMetrics: Registering GenericEventTypeMetrics 2025-06-14 20:19:01,699 INFO org.apache.hadoop.yarn.event.AsyncDispatcher: Registering class org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.SchedulerEventType for class org.apache.hadoop.yarn.server.resourcemanager.ResourceManager$SchedulerEventDispatcher 2025-06-14 20:19:01,700 INFO org.apache.hadoop.yarn.event.AsyncDispatcher: Registering class org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppEventType for class org.apache.hadoop.yarn.server.resourcemanager.ResourceManager$ApplicationEventDispatcher 2025-06-14 20:19:01,701 INFO org.apache.hadoop.yarn.event.AsyncDispatcher: Registering class org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptEventType for class org.apache.hadoop.yarn.server.resourcemanager.ResourceManager$ApplicationAttemptEventDispatcher 2025-06-14 20:19:01,702 INFO org.apache.hadoop.yarn.event.AsyncDispatcher: Registering class org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeEventType for class org.apache.hadoop.yarn.server.resourcemanager.ResourceManager$NodeEventDispatcher 2025-06-14 20:19:01,898 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: Loaded properties from hadoop-metrics2.properties 2025-06-14 20:19:01,926 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled Metric snapshot period at 10 second(s). 2025-06-14 20:19:01,926 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: ResourceManager metrics system started 2025-06-14 20:19:01,991 INFO org.apache.hadoop.yarn.security.YarnAuthorizationProvider: org.apache.hadoop.yarn.security.ConfiguredYarnAuthorizer is instantiated. 2025-06-14 20:19:02,000 INFO org.apache.hadoop.yarn.event.AsyncDispatcher: Registering class org.apache.hadoop.yarn.server.resourcemanager.RMAppManagerEventType for class org.apache.hadoop.yarn.server.resourcemanager.RMAppManager 2025-06-14 20:19:02,019 INFO org.apache.hadoop.yarn.event.AsyncDispatcher: Registering class org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncherEventType for class org.apache.hadoop.yarn.server.resourcemanager.amlauncher.ApplicationMasterLauncher 2025-06-14 20:19:02,637 INFO org.apache.hadoop.yarn.server.resourcemanager.RMNMInfo: Registered RMNMInfo MBean 2025-06-14 20:19:02,640 INFO org.apache.hadoop.yarn.server.resourcemanager.rmapp.monitor.RMAppLifetimeMonitor: Application lifelime monitor interval set to 3000 ms. 2025-06-14 20:19:02,653 INFO org.apache.hadoop.yarn.server.resourcemanager.scheduler.placement.MultiNodeSortingManager: Initializing NodeSortingService=MultiNodeSortingManager 2025-06-14 20:19:02,659 INFO org.apache.hadoop.util.HostsFileReader: Refreshing hosts (include/exclude) list 2025-06-14 20:19:02,672 INFO org.apache.hadoop.conf.Configuration: found resource capacity-scheduler.xml at file:/export/servers/hadoop-3.4.0/etc/hadoop/capacity-scheduler.xml 2025-06-14 20:19:02,690 INFO org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler: Minimum allocation = <memory:1024, vCores:1> 2025-06-14 20:19:02,691 INFO org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler: Maximum allocation = <memory:8192, vCores:4, resource2: 9223372036854775807, resource1: 9223372036854775807G> 2025-06-14 20:19:02,694 INFO org.apache.hadoop.service.AbstractService: Service org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler failed in state INITED org.apache.hadoop.yarn.exceptions.YarnRuntimeException: RM uses DefaultResourceCalculator which used only memory as resource-type but invalid resource-types specified {resource2=name: resource2, units: , type: COUNTABLE, value: 0, minimum allocation: 0, maximum allocation: 9223372036854775807, tags: [], attributes {}, memory-mb=name: memory-mb, units: Mi, type: COUNTABLE, value: 0, minimum allocation: 1024, maximum allocation: 8192, tags: [], attributes {}, vcores=name: vcores, units: , type: COUNTABLE, value: 0, minimum allocation: 1, maximum allocation: 4, tags: [], attributes {}, resource1=name: resource1, units: G, type: COUNTABLE, value: 0, minimum allocation: 0, maximum allocation: 9223372036854775807, tags: [], attributes {}}. Use DominantResourceCalculator instead to make effective use of these resource-types at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.initResourceCalculator(CapacityScheduler.java:359) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.initScheduler(CapacityScheduler.java:306) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.serviceInit(CapacityScheduler.java:412) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:110) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager$RMActiveServices.serviceInit(ResourceManager.java:996) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.createAndInitActiveServices(ResourceManager.java:1511) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceInit(ResourceManager.java:351) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1800) 2025-06-14 20:19:02,703 WARN org.apache.hadoop.service.AbstractService: When stopping the service org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler java.lang.NullPointerException at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.serviceStop(CapacityScheduler.java:427) at org.apache.hadoop.service.AbstractService.stop(AbstractService.java:221) at org.apache.hadoop.service.ServiceOperations.stop(ServiceOperations.java:53) at org.apache.hadoop.service.ServiceOperations.stopQuietly(ServiceOperations.java:102) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:173) at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:110) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager$RMActiveServices.serviceInit(ResourceManager.java:996) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.createAndInitActiveServices(ResourceManager.java:1511) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceInit(ResourceManager.java:351) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1800) 2025-06-14 20:19:02,703 INFO org.apache.hadoop.service.AbstractService: Service RMActiveServices failed in state INITED org.apache.hadoop.yarn.exceptions.YarnRuntimeException: RM uses DefaultResourceCalculator which used only memory as resource-type but invalid resource-types specified {resource2=name: resource2, units: , type: COUNTABLE, value: 0, minimum allocation: 0, maximum allocation: 9223372036854775807, tags: [], attributes {}, memory-mb=name: memory-mb, units: Mi, type: COUNTABLE, value: 0, minimum allocation: 1024, maximum allocation: 8192, tags: [], attributes {}, vcores=name: vcores, units: , type: COUNTABLE, value: 0, minimum allocation: 1, maximum allocation: 4, tags: [], attributes {}, resource1=name: resource1, units: G, type: COUNTABLE, value: 0, minimum allocation: 0, maximum allocation: 9223372036854775807, tags: [], attributes {}}. Use DominantResourceCalculator instead to make effective use of these resource-types at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.initResourceCalculator(CapacityScheduler.java:359) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.initScheduler(CapacityScheduler.java:306) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.serviceInit(CapacityScheduler.java:412) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:110) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager$RMActiveServices.serviceInit(ResourceManager.java:996) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.createAndInitActiveServices(ResourceManager.java:1511) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceInit(ResourceManager.java:351) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1800) 2025-06-14 20:19:02,705 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Stopping ResourceManager metrics system... 2025-06-14 20:19:02,706 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: ResourceManager metrics system stopped. 2025-06-14 20:19:02,706 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: ResourceManager metrics system shutdown complete. 2025-06-14 20:19:02,707 INFO org.apache.hadoop.yarn.event.AsyncDispatcher: AsyncDispatcher is draining to stop, ignoring any new events. 2025-06-14 20:19:02,707 INFO org.apache.hadoop.service.AbstractService: Service ResourceManager failed in state INITED org.apache.hadoop.yarn.exceptions.YarnRuntimeException: RM uses DefaultResourceCalculator which used only memory as resource-type but invalid resource-types specified {resource2=name: resource2, units: , type: COUNTABLE, value: 0, minimum allocation: 0, maximum allocation: 9223372036854775807, tags: [], attributes {}, memory-mb=name: memory-mb, units: Mi, type: COUNTABLE, value: 0, minimum allocation: 1024, maximum allocation: 8192, tags: [], attributes {}, vcores=name: vcores, units: , type: COUNTABLE, value: 0, minimum allocation: 1, maximum allocation: 4, tags: [], attributes {}, resource1=name: resource1, units: G, type: COUNTABLE, value: 0, minimum allocation: 0, maximum allocation: 9223372036854775807, tags: [], attributes {}}. Use DominantResourceCalculator instead to make effective use of these resource-types at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.initResourceCalculator(CapacityScheduler.java:359) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.initScheduler(CapacityScheduler.java:306) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.serviceInit(CapacityScheduler.java:412) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:110) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager$RMActiveServices.serviceInit(ResourceManager.java:996) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.createAndInitActiveServices(ResourceManager.java:1511) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceInit(ResourceManager.java:351) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1800) 2025-06-14 20:19:02,708 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Transitioning to standby state 2025-06-14 20:19:02,708 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Transitioned to standby state 2025-06-14 20:19:02,708 ERROR org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Error starting ResourceManager org.apache.hadoop.yarn.exceptions.YarnRuntimeException: RM uses DefaultResourceCalculator which used only memory as resource-type but invalid resource-types specified {resource2=name: resource2, units: , type: COUNTABLE, value: 0, minimum allocation: 0, maximum allocation: 9223372036854775807, tags: [], attributes {}, memory-mb=name: memory-mb, units: Mi, type: COUNTABLE, value: 0, minimum allocation: 1024, maximum allocation: 8192, tags: [], attributes {}, vcores=name: vcores, units: , type: COUNTABLE, value: 0, minimum allocation: 1, maximum allocation: 4, tags: [], attributes {}, resource1=name: resource1, units: G, type: COUNTABLE, value: 0, minimum allocation: 0, maximum allocation: 9223372036854775807, tags: [], attributes {}}. Use DominantResourceCalculator instead to make effective use of these resource-types at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.initResourceCalculator(CapacityScheduler.java:359) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.initScheduler(CapacityScheduler.java:306) at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.serviceInit(CapacityScheduler.java:412) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:110) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager$RMActiveServices.serviceInit(ResourceManager.java:996) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.createAndInitActiveServices(ResourceManager.java:1511) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceInit(ResourceManager.java:351) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:165) at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1800) 2025-06-14 20:19:02,717 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down ResourceManager at hadoop01/192.168.121.134 ************************************************************/
06-16
修改问题:2025-07-24 15:45:26 - root - ERROR - 系统启动失败: 'NumberPool' object has no attribute '_handle_data_submit' Traceback (most recent call last): File "C:\Users\Administrator\Desktop\数字模型生成器.py", line 2391, in main pool = NumberPool() ^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\数字模型生成器.py", line 220, in __init__ self._setup_subscriptions() File "C:\Users\Administrator\Desktop\数字模型生成器.py", line 258, in _setup_subscriptions event_center.subscribe(EventType.DATA_SUBMIT, self._handle_data_submit) ^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NumberPool' object has no attribute '_handle_data_submit' 其它问题类 'NumberPool' 的未解析的特性引用 '_load_data' 类 'NumberPool' 的未解析的特性引用 '_handle_data_submit'类 'NumberPool' 的未解析的特性引用 '_handle_module_ready'类 'NumberPool' 的未解析的特性引用 '_handle_module_complete'类 'NumberPool' 的未解析的特性引用 '_handle_freeze'类 'NumberPool' 的未解析的特性引用 '_handle_organize'类 'NumberPool' 的未解析的特性引用 '_handle_exclude_numbers'类 'NumberPool' 的未解析的特性引用 '_handle_module_run'已重新声明上文定义的无用法的 '_handle_freeze'已重新声明上文定义的无用法的 '_handle_organize'已重新声明上文定义的无用法的 '_handle_data_submit'重复的代码段(10 行长)PEP 8: E303 too many blank lines (2)未使用局部函数 '_handle_exclude_numbers'从外部作用域隐藏名称 'self'重复的代码段(11 行长)未使用局部函数 '_handle_module_ready'从外部作用域隐藏名称 'self'未使用形参 'self' 的值未使用局部函数 '_handle_module_complete'从外部作用域隐藏名称 'self'未使用局部函数 '_handle_freeze'从外部作用域隐藏名称 'self'未使用形参 'event' 的值未使用局部函数 '_handle_organize'从外部作用域隐藏名称 'self'未使用形参 'event' 的值未使用局部函数 '_handle_freeze'从外部作用域隐藏名称 'self'未使用局部函数 '_handle_organize'从外部作用域隐藏名称 'self'重复的代码段(21 行长)未使用局部函数 '_organize_data'从外部作用域隐藏名称 'self'未使用局部函数 '_organize_front_numbers'从外部作用域隐藏名称 'self'未使用局部函数 '_organize_back_numbers'从外部作用域隐藏名称 'self'未使用局部函数 '_organize_front_hot'从外部作用域隐藏名称 'self'重复的代码段(13 行长)未使用局部函数 '_organize_front_cold'从外部作用域隐藏名称 'self'重复的代码段(11 行长)未使用局部函数 '_organize_back_hot'从外部作用域隐藏名称 'self'重复的代码段(11 行长)未使用局部函数 '_organize_back_cold'从外部作用域隐藏名称 'self'重复的代码段(13 行长)未使用局部函数 '_handle_module_run'从外部作用域隐藏名称 'self'未使用局部函数 '_handle_data_submit'从外部作用域隐藏名称 'self'未使用形参 'self' 的值未使用局部函数 '_handle_data_submit'从外部作用域隐藏名称 'self'重复的代码段(15 行长)未使用局部函数 '_save_data'从外部作用域隐藏名称 'self'未使用局部函数 '_load_data'从外部作用域隐藏名称 'self'重复的代码段(9 行长)代码# ==================== 号码池实现 ==================== class NumberPool: def __init__(self): self._setup_subscriptions() self.data_store: Dict[str, Any] = { 'front_area': [], 'back_area': [], 'front_freq': {}, 'back_freq': {}, 'front_missing': [], 'back_missing': [], 'front_freq_50': [], 'back_in_freq_50': [], 'comb_count': 0, 'uncombined': [], 'front_rec_more': [], 'front_rec_less': [], 'back_rec_more': [], 'back_rec_less': [], 'sum_rec': "", 'prime_rec': "", 'odd_even_rec': "", 'zone_rec': [], 'con_sec_rec': [], 'hot_cold_rec': [], 'hot_rec': [], 'cold_rec': [], 'trend_rec': [] } self.lock = threading.Lock() self.current_module: Optional[str] = None self.pool_id = 'number_pool' self.module_status = {module: False for module in GlobalConfig.MODULES} self.running = True self._setup_subscriptions() # 调用新增的方法 self._load_data() def _setup_subscriptions(self): """订阅事件中心的相关事件""" from event_center import event_center, EventType event_center.subscribe(EventType.DATA_SUBMIT, self._handle_data_submit) event_center.subscribe(EventType.MODULE_READY, self._handle_module_ready) event_center.subscribe(EventType.MODULE_COMPLETE, self._handle_module_complete) event_center.subscribe(EventType.DATA_FREEZE, self._handle_freeze) event_center.subscribe(EventType.DATA_ORGANIZE, self._handle_organize) event_center.subscribe(EventType.EXCLUDE_NUMBERS, self._handle_exclude_numbers) event_center.subscribe(EventType.MODULE_RUN, self._handle_module_run) def update(self, label: str, value: Any): """更新号码池数据""" with self.lock: if label == "前区:": self.data_store['front_area'] = value elif label == "后区:": self.data_store['back_area'] = value elif label == "前数字频:": self.data_store['front_freq'] = value elif label == "前数字缺:": self.data_store['front_missing'] = value elif label == "后数字频:": self.data_store['back_freq'] = value elif label == "后数字缺:": self.data_store['back_missing'] = value elif label == "前频繁推:": self.data_store['front_freq_50'] = value elif label == "后低频推:": self.data_store['back_in_freq_50'] = value elif label == "生组合数:": self.data_store['comb_count'] = value elif label == "未组合码:": self.data_store['uncombined'] = value elif label == "前推荐多:": self.data_store['front_rec_more'] = value elif label == "前推荐少:": self.data_store['front_rec_less'] = value elif label == "后推荐多:": self.data_store['back_rec_more'] = value elif label == "后推荐少:": self.data_store['back_rec_less'] = value elif label == "和值:": self.data_store['sum_rec'] = value elif label == "质合比:": self.data_store['prime_rec'] = value elif label == "奇偶比:": self.data_store['odd_even_rec'] = value elif label == "断区推荐:": self.data_store['zone_rec'] = value elif label == "连号推荐:": self.data_store['con_sec_rec'] = value elif label == "冷热推荐:": self.data_store['hot_cold_rec'] = value elif label == "后区热号:": self.data_store['hot_rec'] = value elif label == "后区冷号:": self.data_store['cold_rec'] = value elif label == "趋势号:": self.data_store['trend_rec'] = value self._save_data() def _handle_exclude_numbers(self, event: Event): """处理排除号码事件""" if event.data: exclude_front = event.data.get('exclude_front', '').split() exclude_back = event.data.get('exclude_back', '').split() # 更新排除号码 self.data_store['excluded_front'] = [int(x) for x in exclude_front if x.isdigit()] self.data_store['excluded_back'] = [int(x) for x in exclude_back if x.isdigit()] # 日志记录 logging.info(f"更新排除号码: 前区 {exclude_front}, 后区 {exclude_back}") def _handle_module_ready(self, event: Event): if event.target == 'pool': logging.info(f"模块 {event.source} 已就绪") app.modules_loaded[event.source] = True def _handle_module_complete(self, event: Event): if event.target == 'pool': logging.info(f"模块 {event.source} 已完成运行") self.module_status[event.source] = False self.current_module = None app.modules_completed[event.source] = True def _handle_freeze(self, event): with self.lock: self.data_store['frozen'] = True print("号码池数据已冻结") def _handle_organize(self, event): print("整理数据事件触发") self._organize_data() def _handle_freeze(self, event: Event): if event.target == 'pool': with self.lock: self.data_store['frozen'] = True logging.info("号码池数据已冻结") def _handle_organize(self, event: Event): if event.target == 'pool': with self.lock: # 检查所有模块是否已完成 all_completed = all(app.modules_completed.values()) if not all_completed: logging.warning("无法整理数据: 还有模块未完成分析") return # 整理数据逻辑 self._organize_data() logging.info("号码池数据已整理") # 更新UI update_event = Event( event_id=int(time.time()), type=EventType.UI_UPDATE, source='pool', target='main_ui', data={'update_type': 'organized_data', 'data': self.data_store['organized_data']} ) event_center.publish(update_event) def _organize_data(self): """整理号码池数据到核心展示区""" organized = { 'front_numbers': self._organize_front_numbers(), 'back_numbers': self._organize_back_numbers(), 'front_hot': self._organize_front_hot(), 'front_cold': self._organize_front_cold(), 'back_hot': self._organize_back_hot(), 'back_cold': self._organize_back_cold() } self.data_store['organized_data'] = organized def _organize_front_numbers(self): """整理前区号码""" front_numbers = self.data_store.get('front_numbers', []) uncombined = self.data_store.get('recommendations', {}).get('uncombined', []) return sorted(list(set(front_numbers + uncombined))) def _organize_back_numbers(self): """整理后区号码""" return self.data_store.get('back_numbers', []) def _organize_front_hot(self): """整理前区热号""" front_freq = list(self.data_store.get('front_freq', {}).keys()) front_freq_rec = self.data_store.get('recommendations', {}).get('front极_freq_50', []) front_rec_more = self.data_store.get('recommendations', {}).get('front_rec_more', []) hot_cold_rec = self.data_store.get('recommendations', {}).get('hot_cold_rec', {}).get('hot', []) hot_numbers = list(set( [int(x) for x in front_freq] + front_freq_rec + front_rec_more + hot_cold_rec )) return sorted(hot_numbers) def _organize_front_cold(self): """整理前区冷号""" front_missing = self.data_store.get('front_missing', []) front_rec_less = self.data_store.get('recommendations', {}).get('front_rec_less', []) hot_cold_rec = self.data_store.get('recommendations', {}).get('hot_cold_rec', {}).get('cold', []) cold_numbers = list(set( front_missing + front_rec_less + hot_cold_rec )) return sorted(cold_numbers) def _organize_back_hot(self): """整理后区热号""" back_freq = list(self.data_store.get('back_freq', {}).keys()) back_rec_more = self.data_store.get('recommendations', {}).get('back_rec_more', []) hot_rec = self.data_store.get('recommendations', {}).get('hot_rec', []) hot_numbers = list(set( [int(x) for x in back_freq] + back_rec_more + hot_rec )) return sorted(hot_numbers) def _organize_back_cold(self): """整理后区冷号""" back_missing = self.data_store.get('back_missing', []) back_in_freq_rec = self.data_store.get('recommendations', {}).get('back_in_freq_50', []) back_rec_less = self.data_store.get('recommendations', {}).get('back_rec_less', []) cold_rec = self.data_store.get('recommendations', {}).get('cold_rec', []) cold_numbers = list(set( back_missing + back_in_freq_rec + back_rec_less + cold_rec )) return sorted(cold_numbers) def _handle_module_run(self, event): if event.target == 'pool': self.current_module = event.source self.module_status[event.source] = True print(f"模块 {event.source} 开始运行") run_event = Event( event_id=int(time.time()), type=EventType.MODULE_RUN, source='pool', target=event.source ) event_center.publish(run_event) def _handle_data_submit(self, event): """处理数据提交事件""" print("收到数据提交事件:", event) # 在这里添加具体的事件处理逻辑 if event.data: print("处理的数据内容:", event.data) def _handle_data_submit(self, event: Event): if event.target == 'pool' and not self.data_store['frozen']: with self.lock: if event.data: self.data_store.update(event.data) # 发布UI更新事件 update_event = Event( event_id=int(time.time()), type=EventType.UI_UPDATE, source='pool', target='main_ui', data={'update_type': 'recommendations', 'data': self.data_store} ) event_center.publish(update_event) self._save_data() print(f"收到数据提交事件: {event}") def _save_data(self): try: with open(GlobalConfig.POOL_SAVE_PATH, 'w', encoding='utf-8') as f: json.dump(self.data_store, f, ensure_ascii=False, indent=2) except IOError as e: logging.error(f"[号码池] 保存数据失败: {str(e)}") def _load_data(self): if os.path.exists(GlobalConfig.POOL_SAVE_PATH): try: with open(GlobalConfig.POOL_SAVE_PATH, 'r', encoding='utf-8') as f: data = json.load(f) with self.lock: self.data_store.update(data) logging.info("[号码池] 成功加载之前保存的数据") except (IOError, json.JSONDecodeError) as e: logging.error(f"[号码池] 加载数据失败: {str(e)}")
最新发布
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值