2

Python 関数と入力キューを入力として受け取り、マルチプロセッシングを介してその入力を介してその関数をディスパッチするディスパッチ関数を記述したいマルチプロセッシングの使用例がありますか?

args関数は厳密に共有されるわけではないため、渡すのが適切かどうかはわかりません。

import multiprocessing

def dispatch(queue, function):
    while True:
        if queue.empty():
            return
        current_project = queue.get()
        function(current_project)

def letter_rip(projects_filename, function):
    project_file = open(projects_filename, 'r')
    projects = project_file.readlines()
    project_file.close()

    q = multiprocessing.Queue()
    for project in projects:
        q.put(project)

    for i in xrange(0, 128):
        p = multiprocessing.Process(target=dispatch, args=(q, ???function??? ))
        p.start()
4

1 に答える 1

3

関数は (オブジェクトとしてではなく関数として使用される場合) 不変オブジェクトであるため、単純な使用法から問題が発生することはありません。

from multiprocessing import Process, Value

def callback(x):
    return x * 2

def handler(x, fn, a):
    a.value = fn(x.value)

if __name__ == '__main__':
    x = Value('d', 2)
    a = Value('d', 0)
    p1 = Process(target=handler, args=(x, callback, a))
    p2 = Process(target=handler, args=(x, callback, a))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    print a.value
于 2012-08-08T21:59:53.553 に答える