线程池的问题
if __name__ == '__main__':
yier =YnerSpider()
exector = ThreadPoolExecutor()
lst =yier.start_requests()
for item in lst:
exector.submit(yier.parse, item)
定义了一个类,继承object, 在不用线程的情况下可以正常运行,像这样使用线程,lst列表长度是9,运行一半就停止了,没有结果是怎么回事,又不报错,上面这个写法,只有是线程池1个,而且for循环一次就break才能正常运行,相当于不用线程。 难道说不继承Thread的类就不能使用线程去调用它的方法?
正在回答 回答被采纳积分+1
上面的线程问题已解决,for循环里面吧线程添加到一个列表,for循环结束后wait这个列表就可以运行了。现在又有下面进程的问题
if __name__ == '__main__':
yier =YnerSpider()
lst =yier.start_requests()
pool = Pool(5)
for item in lst:
pool.apply(func= yier.parse,args=(item,))
pool.close()
pool.join()
这样用多进程报错(在pool.apply报错),也用不了,同样的代码,如果pool.apply执行的函数另外单独定义一个,又是可以运行的。
p = Process(target=yier.parse, args=(lst[0],))
p.start()
p.join()
用一个进程也报错(这里在p.start()报错),同样的把target执行的函数换成一个自定义函数又是正常的了
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星