在Python服务器进程管理器中使用Value()
我在程序中使用一个服务器进程来处理共享内存。
manager = multiprocessing.Manager()
tasksRemaining = manager.list()
sampleFileList = manager.list()
sortedSamples = manager.Value(c_int)
当我尝试声明sortedSamples时,出现了以下错误:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/managers.py", line 207, in handle_request
result = func(c, *args, **kwds)
File "/usr/lib/python2.7/multiprocessing/managers.py", line 386, in create
obj = callable(*args, **kwds)
TypeError: __init__() takes at least 3 arguments (2 given)
根据文档,https://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes,Manager()支持的类型有:列表、字典、命名空间、锁、递归锁、信号量、有界信号量、条件、事件、队列、值和数组。
每当我在管理器之外这样做时,都是可以正常工作的,比如:
sortedSamples = multiprocessing.Value(c_int)
那问题出在哪里呢?
1 个回答
0
看起来当你使用管理器的时候,需要提供实际的值:
Value(typecode, value) 创建一个具有可写值属性的对象,并返回一个代理给它。
(可以查看 SyncManager 的文档)
可以尝试这样做:
value = manager.Value('i', 0)