草庐IT

thread_pool

全部标签

Python 多处理 : How to know to use Pool or Process?

所以我有一个正在编写的算法,函数multiprocess应该调用另一个函数CreateMatrixMp(),在有多少cpu的进程上,在平行下。我以前从未做过多处理,也不能确定下面哪一种方法更有效。在函数CreateMatrixMp()的上下文中使用了“高效”一词,可能需要调用数千次。我已经阅读了有关pythonmultiprocessing的所有文档模块,并得出了这两种可能性:首先是使用Pool类:defMatrixHelper(self,args):returnself.CreateMatrix(*args)defMultiprocess(self,sigmaI,sigmaX):cp

python - 有没有理由在 multiprocessing.Lock 上使用 threading.Lock?

如果软件项目支持已向后移植多处理的Python版本,是否有任何理由使用threading.Lock而不是multiprocessing.Lock?multiprocessing锁也不是线程安全的吗?就此而言,是否有理由使用threading中也在multiprocessing中的任何同步原语? 最佳答案 threading模块的同步原语比multiprocessing更轻更快,因为没有处理共享信号量等问题。如果您使用线程;使用线程的锁。进程应该使用多进程的锁。 关于python-有没有理

python - 在嵌套循环中使用 multiprocessor.Pool 的正确方法

我正在使用multiprocessor.Pool()模块来加速“令人尴尬的并行”循环。我实际上有一个嵌套循环,并且正在使用multiprocessor.Pool来加速内部循环。例如,如果不并行化循环,我的代码将如下所示:outer_array=[random_array1]inner_array=[random_array2]output=[empty_array]foriinouter_array:forjininner_array:output[j][i]=full_func(j,i)并行化:importmultiprocessingfromfunctoolsimportparti

python - 使用 thread.start_new_thread() 在 Python 2.6 中进行简单线程处理

我正在学习有关简单线程的教程。他们给出了这个例子,当我尝试使用它时,我从解释器那里得到了无法理解的错误。你能告诉我为什么这不起作用吗?我在WinXPSP3w/Python2.6currentimportthreaddefmyfunction(mystring,*args):printmystringif__name__=='__main__':try:thread.start_new_thread(myfunction,('MyStringHere',1))exceptExceptionaserrtxt:printerrtxt执行此结果::启动的线程中出现未处理的异常sys.excep

python - 将 mkl_set_num_threads 与 numpy 一起使用

我正尝试像这样使用mkl_set_num_threads设置numpy计算的线程数importnumpyimportctypesmkl_rt=ctypes.CDLL('libmkl_rt.so')mkl_rt.mkl_set_num_threads(4)但我一直遇到段错误:ProgramreceivedsignalSIGSEGV,Segmentationfault.0x00002aaab34d7561inmkl_set_num_threads__()from/../libmkl_intel_lp64.so获取线程数没问题:printmkl_rt.mkl_get_max_threads(

python - Flask 中的 Thread Local Objects 是什么意思?

我正在阅读Flask文档(特别是ForewordforExperiencedProgrammerschapter)并且我阅读了这个-OneofthedesigndecisionsinFlaskwasthatsimpletasksshouldbesimple;theyshouldnottakealotofcodeandyettheyshouldnotlimityou.Becauseofthat,Flaskhasfewdesignchoicesthatsomepeoplemightfindsurprisingorunorthodox.Forexample,Flaskusesthread-l

Python 多处理 : is it possible to have a pool inside of a pool?

我有一个模块A,它通过获取数据并将其发送到模块B、C、D等进行分析,然后将它们的结果结合在一起来执行基本的map/reduce。但是模块B、C、D等似乎不能自己创建多处理池,否则我得到AssertionError:daemonicprocessesarenotallowedtohavechildren是否可以通过其他方式并行化这些作业?为清楚起见,这里有一个(公认的坏)婴儿示例。(我通常会尝试/捕获,但你明白了要点)。A.py:importBfrommultiprocessingimportPooldefmain():p=Pool()results=p.map(B.foo,range(

python - Matplotlib - Tcl_AsyncDelete : async handler deleted by the wrong thread?

我问这个问题是因为我无法解决Python/Django中的一个问题(实际上在纯Python中没问题)导致RuntimeError:tcl_asyncdeleteasynchandlerdeletedbythe线程错误。这在某种程度上与我在Django中呈现matplotlib图的方式有关。我的做法是:...importmatplotlib.pyplotasplt...fig=plt.figure()...plt.close()我极力简化了我的代码。但问题是——即使我只有一行代码:fig=plt.figure()我看到这个RuntimeError发生了。我希望我能解决这个问题,如果我知道

python - 为什么 super(Thread, self).__init__() 不能用于 threading.Thread 子类?

我所知道的Python中的每个对象都可以通过调用来处理其基类初始化:super(BaseClass,self).__init__()threading.Thread的子类似乎不是这种情况,因为如果我在SubClass.__init__()中尝试这个,我得到:RuntimeError:thread.__init__()notcalled是什么导致了这个错误?我查看了threading.Thread的源代码,看起来__init__方法应该设置Thread.__initialized=True。我看到所有示例都使用以下__init__:classYourThread(threading.Th

python - 为什么使用 threading.Event 导致 SIGTERM 未被捕获?

我有一个线程化的Python守护进程。像任何好的守护进程一样,它想要启动它的所有工作线程,然后等待直到它被告知终止。正常的终止信号是SIGTERM,在大多数语言中,我会通过等待事件或互斥量来终止,因此使用threading.Event对我来说很有意义。问题是Python的Event对象和Unix信号似乎不能很好地协同工作。这按预期工作,在SIGTERM上终止:importsignalimporttimeRUN=Truedefhandle(a,b):globalRUNprint"handled"RUN=Falsesignal.signal(signal.SIGTERM,handle)wh