我正在使用httplib2和lxml在python中编写一个web scraper(是的 - 我知道我可以使用scrapy.让我们移过那个......)刮刀有大约15000个页面可以解析为大约400,000个项目.我有代码解析项目即时运行(差不多)但从服务器下载页面的部分仍然非常慢.我想通过并发来克服这个问题.但是,我不能依赖每个页面都需要解析.我尝试过使用单个ThreadPool(比如multiprocessing.pool,但是完成了线程 - 这应该没问题,因为这是一个I/O绑定进程),但我想不出一种优雅(或工作)的方式当最后一个索引项的日期大于我们正在处理的项时停止的所有线程.现在,我正在研究一个使用ThreadPool的两个实例的方法 - 一个用于下载每个页面,另一个用于解析页面.简化的代码示例是:
#! /usr/bin/env python2
import httplib2
from Queue import PriorityQueue
from multiprocessing.pool import ThreadPool
from lxml.html import fromstring
pages = [x for x in range(1000)]
page_queue = PriorityQueue(1000)
url = "http://www.google.com"
def get_page(page):
#Grabs google.com
h = httplib2.Http(".cache")
resp, content = h.request(url, "GET")
tree = fromstring(str(content), base_url=url)
page_queue.put((page, tree))
print page_queue.qsize()
def parse_page():
page_num, page = page_queue.get()
print "Parsing page #" + str(page_num)
#do more stuff with the page here
page_queue.task_done()
if __name__ …Run Code Online (Sandbox Code Playgroud) 我正在使用python的xlib绑定编写的窗口管理器,并且(最初)尝试以更pythonic的方式模仿dwm的行为。我已经获得了很多所需的东西,但是使用X的内置窗口边框功能来指示窗口焦点时遇到了麻烦。
假设我有Xlib的window类的实例,并且我在正确阅读文档,这应该可以做我想做的事情(至少目前是这样)-将预先存在的窗口的窗口边框设置为花哨的颜色并设置边框宽度为2px。
def set_active_border(self, window):
border_color = self.colormap.alloc_named_color(\
"#ff00ff").pixel
window.change_attributes(None,border_pixel=border_color,
border_width = 2 )
self.dpy.sync()
Run Code Online (Sandbox Code Playgroud)
但是,我从中什么也没得到-我可以添加打印语句来证明我的程序确实正在运行与该事件相关联的回调函数,但是在边框上绝对没有颜色变化。谁能确定我在这里到底缺少什么?如果有帮助,我可以粘贴一个更完整的示例。我不确定这是否会,因为这是处理边框的唯一方法。