我正在尝试在我的主文件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()
班级Foo
在Foo.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