相关疑难解决方法(0)

如何从python中的线程获取返回值?

如何获取foo从线程目标返回的值?

from threading import Thread

def foo(bar):
    print('hello {}'.format(bar))
    return 'foo'

thread = Thread(target=foo, args=('world!',))
thread.start()
return_value = thread.join()
Run Code Online (Sandbox Code Playgroud)

如上所示,"一种显而易见的方法"不起作用:'foo'返回'foo'.

python multithreading

289
推荐指数
15
解决办法
28万
查看次数

使2个函数同时运行

我试图让2个函数同时运行.

def func1():
    print 'Working'

def func2():
    print 'Working'

func1()
func2()
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?

python parallel-processing multithreading

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

用于并行进程的Python多处理

如果这对某些人来说太简单了,我很抱歉,但我仍然没有得到python的多处理技巧.我已经阅读了
http://docs.python.org/dev/library/multiprocessing
http://pymotw.com/2/multiprocessing/basics.html 以及谷歌给我的许多其他教程和示例......其中很多从这里也是.

好吧,我的情况是我必须计算许多numpy矩阵,然后我需要将它们存储在一个numpy矩阵中.假设我想使用20个核心(或者我可以使用20个核心),但是我还没有成功使用池资源,因为它会使进程保持活动状态直到池"死".所以我想做这样的事情:

from multiprocessing import Process, Queue  
import numpy as np  

def f(q,i):  
     q.put( np.zeros( (4,4) ) ) 

if __name__ == '__main__':   
     q = Queue()   
     for i in range(30):   
          p = Process(target=f, args=(q,))  
          p.start()  
          p.join()  
     result = q.get()  
     while q.empty() == False:
          result += q.get()  
     print result
Run Code Online (Sandbox Code Playgroud)

但是看起来这些进程并不是并行运行的,而是它们按顺序运行(如果我错了,请纠正我)并且我不知道它们是否在计算后死亡(因此对于超过20个进程他们做了他们的部分让核心免费进行另一个过程).另外,对于非常大的数字(比如说100.000),将所有这些矩阵(可能也很大)存储在队列中会占用大量内存,因为这个想法是将每个结果放在每次迭代上在最终结果中,如使用锁(及其acquire()和release()方法),但如果此代码不用于并行处理,则锁也无用...

我希望有人可以帮助我.

提前致谢!

python multiprocessing

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