2012-08-08 65 views
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() 
+0

你想分享功能或功能實體的源代碼本身?在第一種情況下,從我的角度來看,純樸的.py文件是一個不錯的選擇。 – Vladimir 2012-08-08 20:32:08

+0

已添加當前僞代碼 – Alex 2012-08-08 21:42:00

回答

3

函數是(如函數而不是作爲對象使用時)不可變對象,所以沒有問題,應該從他們的普通用法araise:

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 
相關問題