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

Python多处理:重用方法并避免在子流程中实例化,python,python-2.7,multiprocessing,python-multiprocessing,Python,Python 2.7,Multiprocessing,Python Multiprocessing,我正在尝试在由主文件main.py中的multiprocessing.pool创建的多个子进程中运行类Foo的函数function 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)

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

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()
Foo
Foo.py
like中定义

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显然是随机的)

我希望避免每个子流程都创建
Foo
的新实例。为什么所有的子流程都使用相同的实例

还请注意,如果uuu name uuuu=='uuuu main uuu':或else,则
f=Foo()
不能放在
之后

NameError: global name 'f' is not defined

我按原样运行了您的代码,无法从终端(Ubuntu 14.04 64位)复制该行为。我还运行了您的代码,修改后将类定义添加到主文件中。这也只给了我一个
Foo
对象的实例。我想你是在Windows上运行它的吧?这是非常相关的信息。是的,不幸的是,我必须使用Windows 7 x64,Python2.7 x32。我按原样运行了您的代码,无法从终端(Ubuntu 14.04 64位)复制行为。我还运行了您的代码,修改后将类定义添加到主文件中。这也只给了我一个
Foo
对象的实例。我想你是在Windows上运行它的吧?这是非常相关的信息。是的,不幸的是我必须使用Windows7x64,Python2.7x32。
NameError: global name 'f' is not defined