我没有看到有关Pool.apply,Pool.apply_async和Pool.map的用例的明确示例.我主要是在用Pool.map; 别人有什么好处?
我是python面向对象的新手,我将现有的应用程序重写为面向对象的版本,因为现在开发人员正在增加,我的代码变得无法维护.
通常我使用多处理队列,但我从这个例子http://www.doughellmann.com/PyMOTW/multiprocessing/basics.html发现我可以继承,multiprocessing.Process所以我认为这是一个好主意,我写了一个类来测试这样:
码:
from multiprocessing import Process
class Processor(Process):
def return_name(self):
return "Process %s" % self.name
def run(self):
return self.return_name()
processes = []
if __name__ == "__main__":
for i in range(0,5):
p=Processor()
processes.append(p)
p.start()
for p in processes:
p.join()
Run Code Online (Sandbox Code Playgroud)
但是我无法取回值,我怎样才能以这种方式使用队列?
编辑:我想获得返回值并思考放在哪里Queues().
我正在努力提高elfinder的性能,这是一个基于ajax的文件管理器(elRTE.ru).
它在一个recurisve中使用os.listdir以递归方式遍历所有目录并且具有性能命中(比如列出具有3000 +文件的目录需要7秒).
我试图改善它的性能这里是它的步行功能:
for d in os.listdir(path):
pd = os.path.join(path, d)
if os.path.isdir(pd) and not os.path.islink(pd) and self.__isAccepted(d):
tree['dirs'].append(self.__tree(pd))
Run Code Online (Sandbox Code Playgroud)
我的问题是:
据说Java在性能方面比python快10倍.这也是我从基准测试中看到的.但真正降低Java的是JVM启动时间.
这是我做的一个测试:
$time xlsx2csv.py Types\ of\ ESI\ v2.doc-emb-Package-9
...
<output skipped>
real 0m0.085s
user 0m0.072s
sys 0m0.013s
$time java -jar -client /usr/local/bin/tika-app-0.7.jar -m Types\ of\ ESI\ v2.doc-emb-Package-9
real 0m2.055s
user 0m2.433s
sys 0m0.078s
Run Code Online (Sandbox Code Playgroud)
同样的文件,Docx和Python中的12 KB ms XLSX嵌入文件快25倍!WTH!
Java需要2.055秒.
我知道这完全是由于启动时间,但我需要的是我需要通过脚本调用它来解析一些我不想在python中重新发明轮子的文件.
但是,为了解析10k +文件,它只是不实用..
无论如何要加快它(我已经尝试过-client选项,它只加速这么少(20%)).
我的另一个想法?将其作为长时运行的守护进程运行,在本地使用UDP或Linux-ICP套接字进行通信?
我想基于相似性来聚类文档.
我已经尝试过ssdeep(相似性哈希),非常快但我被告知k-means更快,而且flann是所有实现中最快的,而且更准确所以我尝试使用python绑定但是我找不到任何示例如何在文本上做它(它只支持数组).
我对这个领域非常陌生(k-means,自然语言处理).我需要的是速度和准确性.
我的问题是:
我在用 multiprocessing.Pool()
这是我想要的池:
def insert_and_process(file_to_process,db):
db = DAL("path_to_mysql" + db)
#Table Definations
db.table.insert(**parse_file(file_to_process))
return True
if __name__=="__main__":
file_list=os.listdir(".")
P = Pool(processes=4)
P.map(insert_and_process,file_list,db) # here having problem.
Run Code Online (Sandbox Code Playgroud)
我想传递2个参数我想要做的只是初始化4个DB连接(这里将尝试在每个函数调用上创建连接,因此可能有数百万个连接并导致IO Freezed死亡).如果我可以为每个进程创建4个数据库连接和1个,那就可以.
Pool有什么解决方案吗?还是我应该抛弃它?
编辑:
从你们两个人的帮助下我得到了这个:
args=zip(f,cycle(dbs))
Out[-]:
[('f1', 'db1'),
('f2', 'db2'),
('f3', 'db3'),
('f4', 'db4'),
('f5', 'db1'),
('f6', 'db2'),
('f7', 'db3'),
('f8', 'db4'),
('f9', 'db1'),
('f10', 'db2'),
('f11', 'db3'),
('f12', 'db4')]
Run Code Online (Sandbox Code Playgroud)
所以这里它将如何工作,我将数据库连接代码移动到主要级别并执行此操作:
def process_and_insert(args):
#Table Definations
args[1].table.insert(**parse_file(args[0]))
return True
if __name__=="__main__":
file_list=os.listdir(".")
P = Pool(processes=4)
dbs = [DAL("path_to_mysql/database") for i in range(0,3)]
args=zip(file_list,cycle(dbs))
P.map(insert_and_process,args) …Run Code Online (Sandbox Code Playgroud) 我让linearsvc使用load_file方法对抗训练集和测试集我试图让它在Multiprocessor环境中工作.
如何进行多处理工作LinearSVC().fit() LinearSVC().predict()?我还不熟悉scikit-learn的数据类型.
我也在考虑将样本分成多个数组,但我不熟悉numpy数组和scikit-learn数据结构.
这样做会更容易进入multiprocessing.pool(),然后将样本拆分成块,训练它们并稍后将训练后的集合组合起来,它会起作用吗?
编辑:这是我的方案:
比方说,我们在训练样本集中有100万个文件,当我们想要在几个处理器上分发Tfidfvectorizer的处理时,我们必须分割这些样本(对于我的情况,它只有两个类别,所以假设每个样本需要500000个训练) .我的服务器有24个内核,48 GB,所以我想将每个主题分成块数1000000/24并处理它们的Tfidfvectorizer.就像我将测试样本集,以及SVC.fit()和决定().是否有意义?
谢谢.
PS:请不要关闭它.
这是一种奇怪的行为.
试试这个 :
rep_i=0
print "rep_i is" , rep_i
def test():
global rep_i #without Global this gives error but list , dict , and others dont
if rep_i==0:
print "Testing Integer %s" % rep_i
rep_i=1
return "Done"
rep_lst=[1,2,3]
def test2():
if rep_lst[0]==1:
print "Testing List %s" % rep_lst
return "Done"
if __name__=="__main__":
test()
test2()
Run Code Online (Sandbox Code Playgroud)
为什么列表不需要声明全局?他们是自动全球的?
我发现它真的很奇怪,我大部分时间都使用列表,我甚至根本不使用全球它们作为全球.....
这是我想要做的:http: //mbostock.github.com/d3/talk/20111116/iris-splom.html
但我想在webgl 2d中做到这一点(因为SVG性能非常慢,10k级SVG仅下降到12 fps)
在快速搜索中,我发现了几个webgl-2d库:cocos2d-html5,pixijs,Three.js和webgl-2d(废弃?)
它们似乎很简单,但我想做的是数据可视化.cocos和pixijs是2D游戏库.我是webgl和那些图书馆的新手,所以你们这些专家可以推荐吗?
我需要的东西总结:
互动:
渲染器:WebGL2d(根据webgl的基准测试速度最快)
在Scikit-learn中,K-Means有n_jobs,但MiniBatch K-Means缺乏它.MBK比KMeans快,但在大型样本集中,我们希望它跨多处理(或其他并行处理库)分配处理.
MKB的部分适合答案吗?
python ×7
concurrency ×3
performance ×2
scikit-learn ×2
d3.js ×1
daemon ×1
data-mining ×1
directory ×1
file-io ×1
global ×1
java ×1
javascript ×1
jvm ×1
k-means ×1
list ×1
nlp ×1
numpy ×1
oop ×1
python-2.7 ×1
startup ×1
text-mining ×1
three.js ×1
webgl ×1