Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python创建工作队列_Python_Multithreading_Beautifulsoup - Fatal编程技术网

Python创建工作队列

Python创建工作队列,python,multithreading,beautifulsoup,Python,Multithreading,Beautifulsoup,我是数据挖掘网站使用。第一个页面是,我抓取每个城市,打开页面,抓取该城市每笔交易的URL 目前我没有使用线程,所有的事情都是串行处理的。对于所有500笔交易(来自所有城市),我的程序目前大约需要400秒 为了练习,我想修改代码以使用线程。我已经阅读了一些关于如何在Python中创建队列的内容,但我不想创建500个线程来处理500个URL 相反,我想创建大约20个(工作)线程来处理所有URL有人能给我举个例子,说明20个线程如何处理队列中的500个URL吗? 我希望每个工作人员从队列中获取一个未处

我是数据挖掘网站使用。第一个页面是,我抓取每个城市,打开页面,抓取该城市每笔交易的URL

目前我没有使用线程,所有的事情都是串行处理的。对于所有500笔交易(来自所有城市),我的程序目前大约需要400秒

为了练习,我想修改代码以使用线程。我已经阅读了一些关于如何在Python中创建队列的内容,但我不想创建500个线程来处理500个URL

相反,我想创建大约20个(工作)线程来处理所有URL有人能给我举个例子,说明20个线程如何处理队列中的500个URL吗?


我希望每个工作人员从队列中获取一个未处理的URL,数据挖掘完成后,再处理另一个未处理的URL。只有当队列中不再有URL时,每个工作进程才会退出

顺便说一句,当每个工作者都在进行数据挖掘时,它也会将内容写入数据库。因此,数据库中的线程可能存在问题,但这是另一天的另一个问题:-)


提前谢谢

实施它就行了。你已经把答案讲得很透彻了


我希望每个工作人员从队列中获取一个未处理的URL,数据挖掘完成后,再处理另一个未处理的URL。只有当队列中不再有URL时,每个工作进程才会退出


例如,创建工作队列可能有些过分。如果您获取为每个页面发布的rss提要,而不是尝试解析速度较慢的HTML,那么您可能会有更好的运气。我在下面快速拼凑了一个小脚本,它总共在13秒内解析了它~8秒抓取城市,5秒解析所有rss源

在今天的运行中,它从13个城市总共获得310笔交易(总共有20个城市上市,但其中7个被列为“即将上市”)

产生以下输出:

7.79690480232
20 ['/atlanta', '/new-york', '/san-francisco', '/washington-dc', '/charlotte', '/miami', '/philadelphia', '/houston', '/minneapolis', '/phoenix', '/san-diego', '/nashville', '/austin', '/boston', '/chicago', '/dallas', '/denver', '/los-angeles', '/seattle', '/portland']
13 ['http://feeds.feedburner.com/scoutmob/atl', 'http://feeds.feedburner.com/scoutmob/nyc', 'http://feeds.feedburner.com/scoutmob/sf', 'http://scoutmob.com/washington-dc.rss', 'http://scoutmob.com/nashville.rss', 'http://scoutmob.com/austin.rss', 'http://scoutmob.com/boston.rss', 'http://scoutmob.com/chicago.rss', 'http://scoutmob.com/dallas.rss', 'http://scoutmob.com/denver.rss', 'http://scoutmob.com/los-angeles.rss', 'http://scoutmob.com/seattle.rss', 'http://scoutmob.com/portland.rss']
4.76977992058
310

答案是:“我希望每个工作人员从队列中获取一个未处理的URL,数据挖掘一旦完成就可以了。”。你还想知道什么?你是在问如何使用队列的get方法吗?我想我不是在问线程如何保持“打开”,直到队列中没有更多的项目。我需要先完全填充队列吗?这样我才能像创建一个“活动”的队列连接一样创建队列,并且线程继续工作直到我告诉它停止?我无法理解你的问题。您是否假设当队列为空时,所有线程都会神奇地停止?他们为什么要这么做?谢谢你的回复,但有些事情不对。。。到目前为止,所有城市共有556宗交易。仅仅阅读RSS提要对我来说是不够的,因为RSS提要没有告诉我每笔交易足够的信息(比如商业地址和电话号码)。而且RSS提要似乎也有新闻文章,我不在乎。所以我仍然需要打开每个InvDiv个人交易页面。你的代码几乎都是采用RSS提要并使用Xpath获取所有信息吗?
7.79690480232
20 ['/atlanta', '/new-york', '/san-francisco', '/washington-dc', '/charlotte', '/miami', '/philadelphia', '/houston', '/minneapolis', '/phoenix', '/san-diego', '/nashville', '/austin', '/boston', '/chicago', '/dallas', '/denver', '/los-angeles', '/seattle', '/portland']
13 ['http://feeds.feedburner.com/scoutmob/atl', 'http://feeds.feedburner.com/scoutmob/nyc', 'http://feeds.feedburner.com/scoutmob/sf', 'http://scoutmob.com/washington-dc.rss', 'http://scoutmob.com/nashville.rss', 'http://scoutmob.com/austin.rss', 'http://scoutmob.com/boston.rss', 'http://scoutmob.com/chicago.rss', 'http://scoutmob.com/dallas.rss', 'http://scoutmob.com/denver.rss', 'http://scoutmob.com/los-angeles.rss', 'http://scoutmob.com/seattle.rss', 'http://scoutmob.com/portland.rss']
4.76977992058
310