草庐IT

fast_pool_allocator

全部标签

python - fast python numpy 哪里有功能?

我在几个for循环中多次使用numpy的where函数,但它变得太慢了。有什么方法可以更快地执行此功能?我读到你应该尝试执行内联for循环,并在for循环之前为函数创建局部变量,但似乎没有什么可以提高速度(len(UNIQ_IDS)~800。emiss_data和obj_data是形状为(2600,5200)的numpyndarray。我使用importprofile来处理瓶颈在哪里,for循环中的where是一个很大的瓶颈。importnumpyasnpmax=np.maxwhere=np.whereMAX_EMISS=[max(emiss_data[where(obj_data==

python pool apply_async 和 map_async 不会在完整队列上阻塞

我是python的新手。我正在使用multiprocessing模块读取stdin上的文本行,以某种方式转换它们并将它们写入数据库。这是我的代码片段:batch=[]pool=multiprocessing.Pool(20)i=0fori,contentinenumerate(sys.stdin):batch.append(content)iflen(batch)>=10000:pool.apply_async(insert,args=(batch,i+1))batch=[]pool.apply_async(insert,args=(batch,i))pool.close()pool.

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

我正在使用multiprocessing.Pool()这是我想要的池:definsert_and_process(file_to_process,db):db=DAL("path_to_mysql"+db)#TableDefinationsdb.table.insert(**parse_file(file_to_process))returnTrueif__name__=="__main__":file_list=os.listdir(".")P=Pool(processes=4)P.map(insert_and_process,file_list,db)#herehavingprob

具有全局数据的python并行映射(multiprocessing.Pool.map)

我正在尝试在多个进程上调用一个函数。显而易见的解决方案是python的multiprocessing模块。问题是该功能有副作用。它创建一个临时文件并使用atexit.register和全局列表注册要在退出时删除的文件。以下应证明问题(在不同的上下文中)。importmultiprocessingasmultiglob_data=[]deffunc(a):glob_data.append(a)map(func,range(10))printglob_data#[0,1,2,3,4...,9]Good.p=multi.Pool(processes=8)p.map(func,range(80

python - numpy array set ones between two values, fast

一段时间以来一直在寻找这个问题的解决方案,但似乎找不到任何东西。例如,我有一个numpy数组[0,0,2,3,2,4,3,4,0,0,-2,-1,-4,-2,-1,-3,-4,0,2,3,-2,-1,0]我想要实现的是生成另一个数组来指示一对数字之间的元素,比方说这里介于2和-2之间。所以我想得到一个这样的数组[0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0]请注意,一对(2,-2)之间的任何2或-2都将被忽略。任何简单的方法都是使用for循环遍历每个元素并识别2的第一次出现并将之后的所有内容设置为1直到你点击-2并再次开始寻找下一个2。但我

python - 如何命名 multiprocessing.pool 中的进程?

如果我创建一个包含4个工作线程的池并设置它们执行某些任务(使用pool.apply_async(..)),我可以使用从内部访问每个进程的名称multiprocessing.current_process().name,但如何设置父进程的名称(这主要用于日志记录)? 最佳答案 Process.name是justasetter,你可以自由分配给它。池需要initializer争论。这可以是任何可调用的,并且它会在每个子进程启动时被调用一次。您可以将其指向一个函数,该函数将该进程的name属性设置为您想要的任何值。

python - multiprocessing.pool.ApplyResult 的文档在哪里?

multiprocessing.pool.ApplyResult的严格API文档少得吓人(阅读:零)。多处理解释文档谈到了ApplyResult,但没有定义它们。这似乎也适用于multiprocessing.pool.Pool,尽管Python多处理指南似乎更好地涵盖了它。即使是ApplyResulthelp()结果也是微不足道的:|get(self,timeout=None)||ready(self)||successful(self)||wait(self,timeout=None)Get()和Ready()我明白了。这些都很好。我完全不知道wait()是做什么用的,因为你处理一个

python - 超时后如何中止 multiprocessing.Pool 中的任务?

我正在尝试以这种方式使用python的多处理包:featureClass=[[1000,k,1]forkindrange(start,end,step)]#listofargumentsforfinfeatureClass:pool.apply_async(worker,args=f,callback=collectMyResult)pool.close()pool.join在池的进程中,我想避免等待那些需要超过60秒才能返回结果的进程。这可能吗? 最佳答案 这是一种无需更改worker函数即可执行此操作的方法。需要两个步骤:使用可

python - multiprocessing.Pool 挂起如果 child 导致段错误

我想使用multiprocessing.Pool并行应用一个函数。问题在于,如果一个函数调用触发了一个段错误,则Pool将永远挂起。有人知道我如何制作一个Pool来检测何时发生此类事件并引发错误吗?以下示例显示了如何重现它(需要scikit-learn>0.14)importnumpyasnpfromsklearn.ensembleimportgradient_boostingimporttimefrommultiprocessingimportPoolclassBad(object):tree_=Nonedeffit_one(i):ifi==3:#thiswillsegfaultba

python - 从单个值 : Fast and readable method? 构建一个小的 numpy 数组

我发现我的程序中的一个瓶颈是从给定值列表创建numpy数组,最常见的是将四个值放入一个2x2数组中。有一种显而易见、易于阅读的方法:my_array=numpy.array([[1,3],[2.4,-1]])这需要15秒——非常非常慢,因为我已经做了数百万次。还有一种更快、更难读的方法:my_array=numpy.empty((2,2))my_array[0,0]=1my_array[0,1]=3my_array[1,0]=2.4my_array[1,1]=-1速度提高了10倍,仅需1微秒。有没有既快速又易于阅读的方法?到目前为止我尝试了什么:使用asarray而不是array没有区