【发布时间】:2015-12-03 19:09:44
【问题描述】:
我有对象池来管理一些资源。 我希望使用通过不同进程创建的重用资源。 但我看到所有资源都具有相同的 ID 并被创建为新对象。
我的结果是:
- 创建新资源 = 1
- 创建新资源 = 2
- 创建新资源 = 3
- 创建新资源 = 1
- 创建新资源 = 2
- 创建新资源 = 3
- 创建新资源 = 1
- 创建新资源 = 2
- 创建新资源 = 3
我预计会看到这样的内容:
- 创建新资源 = 1
- 创建新资源 = 2
- 创建新资源 = 3
- 使用现有资源 = 1
- 使用现有资源 = 2
- 使用现有资源 = 3
- 使用现有资源 = 1
- 使用现有资源 = 2
- 使用现有资源 = 3
或者:
- 创建新资源 = 1
- 创建新资源 = 2
- 创建新资源 = 3
- 创建新资源 = 4
- 创建新资源 = 5
- 创建新资源 = 6
- 创建新资源 = 7
- 创建新资源 = 8
- 创建新资源 = 9
导入多处理
class Resource(object):
def __init__(self, ID):
self.id = ID
class ObjectPool:
__id = 0
__instance = None
__resources = list()
def __init__(self):
if ObjectPool.__instance != None:
raise NotImplemented("This is a singleton class.")
@staticmethod
def getInstance():
if ObjectPool.__instance == None:
ObjectPool.__instance = ObjectPool()
return ObjectPool.__instance
def getResource(self):
if len(self.__resources) > 0:
resourse = self.__resources.pop(0)
print "Using existing resource = ", resourse.id
return resourse
else:
ObjectPool.__id += 1
print "Creating new resource = ", ObjectPool.__id
return Resource(ID=ObjectPool.__id)
def returnResource(self, resource):
self.__resources.append(resource)
POOL = ObjectPool.getInstance()
def func():
resource = POOL.getResource()
resource2 = POOL.getResource()
resource3 = POOL.getResource()
POOL.returnResource(resource)
POOL.returnResource(resource2)
POOL.returnResource(resource3)
if __name__ == "__main__":
for n in range(3):
process = multiprocessing.Process(target=func)
process.start()
【问题讨论】:
标签: python multiprocessing pool