Questions tagged «multiprocessing»

多处理是在单个计算机系统中使用两个或多个中央处理单元(CPU)。相关的实现和用法细节因操作系统和编程语言而异。因此,在使用此标签时,请始终为操作系统和语言添加标签。

19
python multiprocessing pool.map用于多个参数
在Python多处理库中,是否存在pool.map的变体,它支持多个参数? text = "test" def harvester(text, case): X = case[0] text+ str(X) if __name__ == '__main__': pool = multiprocessing.Pool(processes=6) case = RAW_DATASET pool.map(harvester(text,case),case, 1) pool.close() pool.join()


8
Python多处理PicklingError:无法腌制<type'function'>
很抱歉,我无法使用更简单的示例重现该错误,并且我的代码过于复杂,无法发布。如果我在IPython Shell中而不是在常规Python中运行该程序,那么效果会很好。 我查阅了有关此问题的以前的笔记。它们都是由使用池调用在类函数中定义的函数引起的。但这不是我的情况。 Exception in thread Thread-3: Traceback (most recent call last): File "/usr/lib64/python2.7/threading.py", line 552, in __bootstrap_inner self.run() File "/usr/lib64/python2.7/threading.py", line 505, in run self.__target(*self.__args, **self.__kwargs) File "/usr/lib64/python2.7/multiprocessing/pool.py", line 313, in _handle_tasks put(task) PicklingError: Can't pickle &lt;type 'function'&gt;: attribute lookup __builtin__.function failed 我将不胜感激任何帮助。 更新:我的泡菜功能定义在模块的顶层。虽然它调用包含嵌套函数的函数。即f()要求g()调用h()具有嵌套函数i(),和我打电话pool.apply_async(f)。f(),g(),h()都在顶层定义。我用这种模式尝试了更简单的示例,尽管它可以工作。

21
在Python中使用多重处理时应如何记录?
现在,我在框架中有一个中央模块,该模块使用Python 2.6 multiprocessing模块产生多个进程。因为使用multiprocessing,所以存在模块级的多处理感知日志LOG = multiprocessing.get_logger()。根据文档,此记录器具有进程共享的锁,因此您不会sys.stderr通过让多个进程同时向其写入(或任何文件句柄)来乱码。 我现在遇到的问题是框架中的其他模块不支持多处理。以我的方式看,我需要使这个中央模块上的所有依赖项都使用支持多处理的日志记录。在框架内这很烦人,更不用说框架的所有客户了。有我没有想到的替代方法吗?

12
使用多重处理Pool.map()时无法腌制<type'instancemethod'>
我正在尝试使用multiprocessing的Pool.map()功能同时划分工作。当我使用以下代码时,它可以正常工作: import multiprocessing def f(x): return x*x def go(): pool = multiprocessing.Pool(processes=4) print pool.map(f, range(10)) if __name__== '__main__' : go() 但是,当我以更加面向对象的方式使用它时,它将无法正常工作。它给出的错误信息是: PicklingError: Can't pickle &lt;type 'instancemethod'&gt;: attribute lookup __builtin__.instancemethod failed 当以下是我的主程序时,会发生这种情况: import someClass if __name__== '__main__' : sc = someClass.someClass() sc.go() 这是我的someClass课: import multiprocessing class someClass(object): def __init__(self): pass def …

1
multiprocessing.Pool:map_async和imap有什么区别?
我想学习如何使用Python的multiprocessing包,但我不明白之间的差别map_async和imap。我注意到两者map_async和imap都是异步执行的。那么我什么时候应该使用另一个呢?我应该如何检索返回的结果map_async? 我应该使用这样的东西吗? def test(): result = pool.map_async() pool.close() pool.join() return result.get() result=test() for i in result: print i

18
多重处理:如何在类中定义的函数上使用Pool.map?
当我运行类似: from multiprocessing import Pool p = Pool(5) def f(x): return x*x p.map(f, [1,2,3]) 它工作正常。但是,将其作为类的函数: class calculate(object): def run(self): def f(x): return x*x p = Pool() return p.map(f, [1,2,3]) cl = calculate() print cl.run() 给我以下错误: Exception in thread Thread-1: Traceback (most recent call last): File "/sw/lib/python2.6/threading.py", line 532, in __bootstrap_inner …



6
线程和多处理模块之间有什么区别?
我正在学习如何在Python中使用threading和multiprocessing模块并行运行某些操作并加快代码速度。 我发现很难理解一个threading.Thread()对象与一个对象之间的区别(也许是因为我没有任何理论背景)multiprocessing.Process()。 另外,对我来说,如何实例化一个作业队列并使其只有4个(例如)并行运行,而另一个则等待资源释放后再执行,对我来说也不是很清楚。 我发现文档中的示例很清楚,但并不十分详尽。一旦尝试使事情复杂化,我就会收到很多奇怪的错误(例如无法腌制的方法,等等)。 那么,什么时候应该使用threadingand multiprocessing模块? 您能否将我链接到一些资源,以解释这两个模块的概念以及如何在复杂的任务中正确使用它们?

10
键盘中断与python的多处理池
如何使用python的多处理池处理KeyboardInterrupt事件?这是一个简单的示例: from multiprocessing import Pool from time import sleep from sys import exit def slowly_square(i): sleep(1) return i*i def go(): pool = Pool(8) try: results = pool.map(slowly_square, range(40)) except KeyboardInterrupt: # **** THIS PART NEVER EXECUTES. **** pool.terminate() print "You cancelled the program!" sys.exit(1) print "\nFinally, here are the results: …

3
为什么在导入numpy之后多处理仅使用单个内核?
我不确定这是否更多的是操作系统问题,但是我想在这里问一下,以防有人对Python有所了解。 我一直在尝试使用并行化CPU繁重的for循环joblib,但是我发现不是将每个工作进程分配给不同的内核,而是最终将所有工作进程分配给相同的内核,并且没有性能提升。 这是一个非常简单的例子... from joblib import Parallel,delayed import numpy as np def testfunc(data): # some very boneheaded CPU work for nn in xrange(1000): for ii in data[0,:]: for jj in data[1,:]: ii*jj def run(niter=10): data = (np.random.randn(2,100) for ii in xrange(niter)) pool = Parallel(n_jobs=-1,verbose=1,pre_dispatch='all') results = pool(delayed(testfunc)(dd) for dd in …

4
多处理中的共享内存对象
假设我有一个很大的内存numpy数组,我有一个函数func将这个巨型数组作为输入(以及其他一些参数)。func具有不同参数的参数可以并行运行。例如: def func(arr, param): # do stuff to arr, param # build array arr pool = Pool(processes = 6) results = [pool.apply_async(func, [arr, param]) for param in all_params] output = [res.get() for res in results] 如果我使用多处理库,那么该巨型数组将多次复制到不同的进程中。 有没有办法让不同的进程共享同一数组?该数组对象是只读的,永远不会被修改。 更复杂的是,如果arr不是数组,而是任意python对象,是否可以共享它? [编辑] 我读了答案,但仍然有些困惑。由于fork()是写时复制的,因此在python多处理库中生成新进程时,我们不应调用任何额外的开销。但是下面的代码表明存在巨大的开销: from multiprocessing import Pool, Manager import numpy as np; import …

5
Windows上的RuntimeError尝试Python多处理
我正在尝试在Windows机器上使用Threading and Multiprocessing的第一个正式python程序。我无法启动进程,但是python给出了以下消息。问题是,我没有在主模块中启动线程。线程在类内的单独模块中处理。 编辑:顺便说一句,此代码在ubuntu上运行良好。在窗户上不太 RuntimeError: Attempt to start a new process before the current process has finished its bootstrapping phase. This probably means that you are on Windows and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line …

5
多重处理:如何在多个流程之间共享一个字典?
一个程序,该程序创建在可连接队列上工作的多个进程Q,并且最终可能会操纵全局字典D来存储结果。(因此每个子进程都可以D用来存储其结果,并查看其他子进程正在产生什么结果) 如果我在子进程中打印字典D,我会看到对它进行的修改(即在D上)。但是在主流程加入Q之后,如果我打印D,那就是空洞的字典! 我了解这是同步/锁定问题。有人可以告诉我这里发生了什么,如何同步对D的访问?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.