我想并行运行2个函数,并使用一个函数的返回值(连续存储在列表中),以便在另一个函数中使用。
我已经写了一些功能来实现上述目标(从此论坛上的一些帖子中获得帮助)。
u=[]
def func_a():
Num1=10000
for i1 in range(callNum1):
ul = <some_function_returns_a_value>
u.append(ul)
def func_b():
Num2=10000
time.sleep(30)
for i2 in range(Num2):
ul1=u.pop(i2)
print ul1
def RunP(*fns):
proc = []
for fn in fns:
p = Process(target=fn)
p.start()
proc.append(p)
for p in proc:
p.join()
我将两个函数称为以下
RunP(func_a, func_b)
但是当我运行这个时,我收到了这个错误:
RunP(func_a, func_b)
Process Process-2:
Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/multiprocessing-2.6.2.1-py2.4-linux-i686.egg/multiprocessing/process.py", line 237, in _bootstrap
self.run()
File "/usr/lib/python2.4/site-packages/multiprocessing-2.6.2.1-py2.4-linux-i686.egg/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "test.py", line 419, in func_b
ul1=u.pop(i2)
IndexError: pop from empty list
请帮我完成预定的任务。
答案 0 :(得分:4)
听起来你想使用Queue
。
这是一个快速的例子,它与你的代码有些相似:
import multiprocessing
def func_a(q):
q.put(3)
q.put(2)
q.put(1)
def func_b(q):
v = q.get()
print 'func_b prints:', v
v = q.get()
print 'func_b prints:', v
v = q.get()
print 'func_b prints:', v
if __name__ == '__main__':
q = multiprocessing.Queue()
p1 = multiprocessing.Process(target = func_a, args = (q,))
p1.start()
p2 = multiprocessing.Process(target = func_b, args = (q,))
p2.start()
p1.join()
p2.join()
当我运行它时,会打印:
func_b prints: 3
func_b prints: 2
func_b prints: 1