python - 使用manager修改多进程进程之间的变量

标签 python multiprocessing python-multithreading

尝试在多进程进程中完成的方法中设置一个值,并在完成后由“主”进程使用。

它目前给了我

TypeError: 'str' object does not support item assignment
DID WE? ['']

给出以下代码,呃,这并不是我真正想要的:

def load_dat_site(d):
global seek_site
browser.execute_script("window.location = '"+seek_site+"';")
print "SITE LOADED"
d[0] = 'YEAH!'


manager = Manager()
d = manager.list([''])
site_load_process = multiprocessing.Process(target=load_dat_site, args=(d))
site_load_process.start()
site_load_process.join(15)
print "DID WE?", d

是否有任何原因导致示例脚本似乎能够设置其列表的值,但实际上却不能?

最佳答案

来自the multiprocessing.Process documentation (强调):

"args is the argument tuple for the target invocation."

将您的 multiprocessing.Process 实例化更改为如下所示,一切都会按预期工作。

site_load_process = multiprocessing.Process(target=load_dat_site, 
                                            args=(d,)) # the comma is essential!

这里有一个独立的工作示例:http://ideone.com/VeTFYk

<小时/>

请记住,构成元组的不是方括号/括号,而是逗号。

>>> not_a_tuple = (0)
>>> type(not_a_tuple)
<type 'int'>

>>> t = 0,
>>> type(t)
<type 'tuple'>

关于python - 使用manager修改多进程进程之间的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14513418/

相关文章:

javascript - 如何通过 SDK 或 API 调用从 Azure 获取价格

python - DCGAN : discriminator getting too strong too quickly to allow generator to learn

python - 将目录中的文件夹名称添加到文件名

python - 在 python 服务器中的进程之间共享列表

python - 对 python asyncio gRPC 客户端的多线程支持

Python 子进程挂起命名管道

python asyncio 在 key 可用时通过 key 从字典中异步获取数据

python - multiprocessing.Process 的日志输出

python - 使用多进程附加到实例列表

python - 跨线程更新观察者模式(非阻塞)