jython executor
# -*- coding: utf-8 -*- try: from webx import settings except ImportError: import os,sys p = os.path.dirname(__file__) for x in xrange(5): p=os.path.split(p)[0] os.sys.path.append(p+'/src/main/webapp') """ 由于需要依赖 java concurrent框架, 所以只能通过jython启动 """ from java.util.concurrent import ThreadFactory,Executors,ThreadPoolExecutor,TimeUnit,ArrayBlockingQueue from java.lang import Thread,Runnable from java.util.concurrent.atomic import AtomicInteger from task.index.solr import Solr from people.service import userQueryService from blog.service import blogQueryService from tag.service import tagQueryService from shopping.service import shoppingItemService import logging logger = logging.getLogger("opener") ''' 负责创建Solr Client ''' class SolrFactory(): def __init__(self,server,timeout): self.cores = ['people','feed','feed2','album'] self.solrs = {} for core in self.cores: logger.info("init solr client "+core) self.solrs[core] = Solr(server + core + "/", timeout) def get_solr(self,core): return self.solrs.get(core) write = 'http://192.168.173.6:7100/solr/' solrFactory = SolrFactory(write,20) ''' 为 Executors中的线程增加名字,便于jstack的时候查看Thread 参考:java concurrent包的 Executors.DefaultThreadFactory ''' class NamedThreadFactory(ThreadFactory): def __init__(self,prefix,daemo=False): self.mPrefix = prefix + "-thread-"; self.mDaemo = daemo; self.mGroup = Thread.currentThread().getThreadGroup() self.mThreadNum = AtomicInteger(1); def newThread(self, runnable): name = '%s%s ' %(self.mPrefix , self.mThreadNum.getAndIncrement()) ret = Thread(self.mGroup, runnable, name, 0) ret.setDaemon(self.mDaemo) return ret; rejectedExecutionHandler = ThreadPoolExecutor.CallerRunsPolicy() #使用CallerRuns策略,变相的减缓新任务的提交速度 buildExecutor = ThreadPoolExecutor(5,5, 0L, TimeUnit.MILLISECONDS,ArrayBlockingQueue(1000), NamedThreadFactory("build"),rejectedExecutionHandler ); commitExecutor = ThreadPoolExecutor(5,5, 0L, TimeUnit.MILLISECONDS,ArrayBlockingQueue(1000), NamedThreadFactory("commit"),rejectedExecutionHandler ); ''' 负责把模型build成solr document,分别有: BlogBuilder PeopleBuilder SolrBuilder ''' class BaseBuilder(Runnable): def _solr_str(self,date): """1995-12-31T23:59:59Z""" return date.strftime("%Y-%m-%dT%H:%M:%SZ") def run(self): raise NotImplementedError class BlogBuilder(BaseBuilder): def __init__(self, ids,executor): self.ids = ids self.executor = executor self.solr = solrFactory.get_solr("feed") def _extra_tags(self,blog): iphone_wall_paper = blog.photo_width>=320 and blog.photo_height>=480 and blog.photo_height/float(blog.photo_width) == 1.5 and "INNERTAGIPHWP" or "" iphone_wall_paper = blog.photo_width>=320 and blog.photo_height>=568 and blog.photo_height/float(blog.photo_width) == 1.775 and "INNERTAGIPHWP5" or iphone_wall_paper item_cat_id = '' item_cat_pid = '' # if blog.is_buyable(): # item_id = shoppingItemService.find_item_id(blog) # item_cat = shoppingItemService.find_or_create_taobao_category(None,item_id) # if item_cat: # item_cat_id = item_cat.get("cid") and 'ITEMCATID_%s'%item_cat.get("cid") # item_cat_pid = item_cat.get("parent_id") and 'ITEMCATPID_%s'%item_cat.get("parent_id") # else: # logger.error('Can not include taobao category info when indexing %s'%blog.id) return (iphone_wall_paper, item_cat_id, item_cat_pid) def run(self): #print 'build %s'%len(self.ids) blog_list = blogQueryService.queryBlogDetail(self.ids) doc = [] for blog in blog_list: if not blog.is_normal(): continue if blog.is_in_audit(): continue blog_tags = tagQueryService.queryTagStrByBlogId(blog.id) extra_tags = self._extra_tags(blog) #这里可以扩展内部的其他各种查询条件, 比增加字段靠谱, 性能更好, 更灵活 data = {"id": blog.id, "sender_id": blog.sender_id, "msg": blog.msg or "" +" " +"".join(blog_tags)+" " +"".join(extra_tags), "buyable": blog.buyable, "add_datetime": self._solr_str(blog.add_datetime), "last_replied_datetime":self._solr_str(blog.last_replied_datetime), "photo_id":blog.photo_id, "photo_width": blog.photo_width, "photo_height": blog.photo_height, "favorite_count":blog.favorite_count, "category":blog.category, "status":blog.status, "group_id": blog.group_id, "album_id":blog.album_id, "pop_score":1, #已经废弃 "shopping_score":1,#已经废弃 "src_domain":blog.source_link, "price":blog.price, } doc.append(data) self.executor.execute(Commiter(doc,self.solr)) #提交task class Commiter(Runnable): def __init__(self,doc,solr): self.doc = doc self.solr = solr def run(self): #print 'commit %s'%len(self.doc) if self.doc: try: self.solr.add_many(self.doc) self.solr.commit() except Exception,e: logger.exception(e) if __name__ == "__main__": buildExecutor.execute(BlogBuilder([1,2,3,4,5,6,7,8,9,10,11],commitExecutor)) import time while True: time.sleep(2)
相关推荐
标题 "jython-standalone-2.7.0.zip" 提供了我们正在处理的是一个Jython的独立版本,具体是2.7.0的发行版。Jython是一种Python的实现,它允许Python代码在Java平台上运行。这个压缩包很可能包含了一个完整的Jython...
### Jython 各个版本下载地址解析 Jython 是一种Python的实现,它允许Python代码在Java平台上运行。本文将详细介绍Jython不同版本的下载地址及相关文件信息。 #### Jython 2.2 版本 - **发布日期**:2007年8月24...
**Jython 中文详细教程** Jython是一种基于Python语言的解释器,它是针对Java平台设计的,能够直接运行在Java虚拟机(JVM)上。它不仅提供了Python的全部功能,还能够无缝集成Java类库,使得开发者可以利用Python的...
**Burp Suite 环境 Jython 安装详解** Burp Suite 是一款广泛使用的网络安全测试工具,主要用于 web 应用程序的安全性测试。而 Jython 是 Python 语言的一个实现,它运行在 Java 虚拟机(JVM)上,使得 Python 代码...
《Java调用Python脚本:Jython详解及应用》 在现代软件开发中,常常需要在不同的编程语言之间进行交互,比如Java与Python。Jython是这样一种工具,它允许Java开发者无缝地运行Python代码,使得Java应用可以利用...
Jython 简单配置和使用 Jython 是一种完整的语言,而不是一个 Java 翻译器或仅仅是一个 Python 编译器,它是一个 Python 语言在 Java 中的完全实现。Jython 也有很多从 CPython 中继承的模块库。最有趣的事情是 ...
**Jython概述** Jython是一种基于Java平台的Python实现,它允许Python代码与Java平台无缝集成。Jython的出现使得Python开发者能够利用Java的强大功能,同时保持Python的简洁性和易读性。它不仅实现了Python标准库,...
Jython 安装和使用方法 Jython 是一个基于 Java 语言的 Python 实现,它可以让 Python 语言运行在 Java 平台上。下面将详细介绍 Jython 的安装和使用方法。 安装 Jython 首先,需要从 Jython 官方网站下载 Jython...
标题"jython-standalone-2.7.1 burpsuite的python环境配置"指的是使用Jython(一个Python的Java实现)的独立版本2.7.1来配置Burp Suite(一个流行的网络安全测试工具)的Python环境。Burp Suite允许用户通过编写...
jython官方正版资源 为了省去大家找Jython安装包的时间,附上此Jython版本。 Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。
如果windows的用户安装插件有问题的,尝试一下换这个jython: Jython官网: https://www.jython.org/downloads.html Jython环境安装包: ...
**Jython教程** Jython是一种基于Python编程语言的开源实现,它完全兼容Python语法,并且在Java平台上运行。由IBM developerworks提供的Jython教程旨在帮助开发者理解和掌握如何在Java环境中利用Jython进行开发。 ...
Jython是一种Python编程语言的实现,它允许开发者在Java平台上编写和运行Python代码。这个"jython2.5-安装包"显然包含了Jython 2.5版本的安装程序,这是一个较旧但仍然有其用途的版本。Jython 2.5b1是该系列的beta1...
**Jython简易教程** Jython,一种Python的实现,是Python语言与Java平台的结合体。它允许开发者利用Python的简洁语法和丰富的库,同时享受到Java的高性能和跨平台优势。Jython运行在Java虚拟机(JVM)上,使得...
《Jython:Java与Python的桥梁》 Jython,这个名字源于Java和Python的结合,是一种Python的实现,它允许在Java平台上运行Python代码。标题中的"jython-standalone-2.7.1.jar"是一个独立的Jython版本,特别适用于...
jython官方正版资源 为了省去大家找Jython安装包的时间,附上此Jython版本。 Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。
jython官方正版资源 为了省去大家找Jython安装包的时间,附上此Jython版本。 Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。
这份文档主要介绍了两个核心概念:一个是可以与Jython对象映射的Java接口类,以及一个用于从Jython文件中获取Java对象、Jython对象和Jython函数对象的工厂方法类。 ### Jython与Java接口的映射 首先,我们关注到的...
标题 "Jython" 提到的是一个与Python编程语言相关的开源项目——Jython。Jython是Python的一个实现,它允许Python代码在Java平台上运行。Jython将Python语言的灵活性和简洁性与Java平台的强大功能相结合,使得开发者...