小编Phy*_*win的帖子

254
推荐指数
3
解决办法
22万
查看次数

python子类化multiprocessing.Process

我是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().

python oop parallel-processing concurrency multiprocessing

25
推荐指数
1
解决办法
3万
查看次数

目录行走的速度更快,而不是os.listdir?

我正在努力提高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)

我的问题是:

  1. 如果我改变os.walk而不是os.listdir,它会改善性能吗?
  2. 如何使用dircache.listdir()?在初始请求时缓存WHOLE目录/ subdir内容并返回缓存结果,如果没有上传新文件或文件没有更改?
  3. 目录行走的其他方法有哪些更快?
  4. 任何其他服务器端文件浏览器,用python快速编写(但我更喜欢快速编写这个)?

python directory performance file-io

16
推荐指数
3
解决办法
2万
查看次数

有什么方法可以提升JVM启动速度?

据说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套接字进行通信?

java performance jvm daemon startup

15
推荐指数
3
解决办法
1万
查看次数

如何使用k-means(Flann with python)对文档进行聚类?

我想基于相似性来聚类文档.

我已经尝试过ssdeep(相似性哈希),非常快但我被告知k-means更快,而且flann是所有实现中最快的,而且更准确所以我尝试使用python绑定但是我找不到任何示例如何在文本上做它(它只支持数组).

我对这个领域非常陌生(k-means,自然语言处理).我需要的是速度和准确性.

我的问题是:

  1. 我们可以使用KMeans进行文档相似性分组/聚类(Flann似乎不允许任何文本输入)
  2. Flann是正确的选择吗?如果没有,请建议我支持文本/文档集群的高性能库,它具有python包装器/ API.
  3. k-means是正确的算法吗?

nlp cluster-analysis data-mining text-mining k-means

11
推荐指数
2
解决办法
1万
查看次数

multiprocessing.pool.map和带有两个参数的函数

我在用 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)

python concurrency multithreading multiprocessing

10
推荐指数
3
解决办法
3万
查看次数

多处理scikit-learn

我让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:请不要关闭它.

python multithreading numpy machine-learning scikit-learn

10
推荐指数
2
解决办法
9475
查看次数

在Python中,为什么list []会自动全局?

这是一种奇怪的行为.

试试这个 :

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)

为什么列表不需要声明全局?他们是自动全球的?

我发现它真的很奇怪,我大部分时间都使用列表,我甚至根本不使用全球它们作为全球.....

python global list python-2.7

9
推荐指数
3
解决办法
1万
查看次数

适合与D3js组合的库,允许绘制到webgl(2D)

这是我想要做的: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的基准测试速度最快)

javascript webgl three.js d3.js cocos2d-html5

6
推荐指数
1
解决办法
1786
查看次数

我如何分发minibatch kmeans(scikit-learn)的处理?

在Scikit-learn中,K-Means有n_jobs,但MiniBatch K-Means缺乏它.MBK比KMeans快,但在大型样本集中,我们希望它跨多处理(或其他并行处理库)分配处理.

MKB的部分适合答案吗?

python machine-learning multiprocessing scikit-learn

6
推荐指数
1
解决办法
1519
查看次数