0

2 つの関数を並行して実行し、1 つの関数からの戻り値 (リストに継続的に格納されている) を使用して、別の関数で使用したいと考えています。

上記を実現するためにいくつかの関数を作成しました (このフォーラムの以前の投稿から助けを得ました)。

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

意図したタスクを達成するのを手伝ってください。

4

1 に答える 1

4

を使用したいようですQueue

これは、コードにいくぶん似ている簡単な「n」ダーティな例です。

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
于 2012-04-12T08:21:25.563 に答える