在Python服务器进程管理器中使用Value()

0 投票
1 回答
723 浏览
提问于 2025-04-18 03:16

我在程序中使用一个服务器进程来处理共享内存。

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)

撰写回答