Python多处理:重用方法并避免子进程中的实例化

时间:2016-01-19 22:19:48

标签: python python-2.7 multiprocessing python-multiprocessing

我正在尝试在我的主文件function中由Foo创建的多个子流程中运行类multiprocessing.pool的函数Main.py

import sys
import multiprocessing
from Foo import Foo

f = Foo()

def get(n):
    print f.ID
    sys.stdout.flush() # Print the used instance's ID immediately
    return f.function(n)

def calculate():
    s = pool.map_async(get,range(4))
    return s.get()

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=4)
    result = calculate()
    pool.close()

班级FooFoo.py中定义

import random

class Foo():
    def __init__(self):
        print 'Initialized!'
        self.ID = random.random() # Assign an unique ID to spot instance
        pass
    def function(self,x):
        return x**2

我得到的输出是(ID明显随机)

Initialized!
Initialized!
0.955181146828
0.955181146828
0.955181146828
0.955181146828
>>> Initialized!
Initialized!
Initialized!

我想避免每个子进程创建一个Foo的新实例。为什么会发生这种情况,尽管所有子进程都会根据需要使用相同的实例?

另请注意,f = Foo()之后无法放置if __name__ == '__main__':

NameError: global name 'f' is not defined

0 个答案:

没有答案