Python--一个文件被重复import的问题?
2021/9/2 14:06:18
本文主要是介绍Python--一个文件被重复import的问题?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
测试代码结构:
演示案例并没有进行网页爬取,主要目的是演示重复import的问题。
spider目录下是各个业务spider,把任务提交到crawler。
crawler中有个任务队列汇集各个业务spider提交的任务,然后在独立的线程中对任务进行实际的爬取动作。
main启动crawler及各个业务spider
在main.py和base_spider.py中导入crawler,由于导入的方式不一样,导致重复导入,而crawler也是不同的实列,导致爬取的任务队列一致为空
代码如下:
main.py
# main.py # 这种引入方式与base_spider中引入的方式不一样, # 会重复导入crawler实例,导致这里的crawler与base_spider中的crawler不是同一个实例 # from crawler import crawler # 导入crawler实例的格式与base_spider中一样,保证只有一个crawler实例 from import_test.crawler import crawler from spider.tb_pider import TbSpider if __name__ == '__main__': crawler.run() tb_spider = TbSpider() tb_spider.run() ''' 导入crawler方式不一致的输出结果: crawler run crawler task length: 0 TbSpider add task: 1 TbSpider add task: 2 TbSpider add task: 3 TbSpider add task: 4 crawler task length: 0 crawler task length: 0 crawler task length: 0 crawler task length: 0 ''' ''' 导入crawler方式一致的输出结果: crawler run crawler task length: 0 TbSpider add task: 1 TbSpider add task: 2 TbSpider add task: 3 TbSpider add task: 4 crawler task length: 4 4 crawler task length: 3 3 crawler task length: 2 2 crawler task length: 1 1 crawler task length: 0 crawler task length: 0 '''View Code
crawler.py
# crawler.py import threading import time class Crawler: def __init__(self): self._task_queue = [] def length(self): return len(self._task_queue) def add_task(self, task): self._task_queue.append(task) def do_task(self): while True: print('crawler task length: ', self.length()) if self.length() <= 0: time.sleep(2) continue print(self._task_queue.pop()) def run(self): print('crawler run') crawler_thread = threading.Thread(target=self.do_task, name='crawler_thread') crawler_thread.start() crawler = Crawler()View Code
base_spider.py
# base_spider.py from import_test.crawler import crawler class BaseSpider: def __init__(self): self.crawler = crawler def run(self): raise NotImplementedError()View Code
tb_spider.py
# tb_spider.py from spider.base_spider import BaseSpider class TbSpider(BaseSpider): def run(self): for i in range(1, 5): print('TbSpider add task: ', i) self.crawler.add_task(i)View Code
这篇关于Python--一个文件被重复import的问题?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Python基础编程
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南