python - 全局变量不会在外部进程的循环中更新
问题描述
我一直在尝试通过创建一个将数据放入其中的空对象将数据传递到另一个进程中的循环中。当我更改对象的内容时,该进程似乎没有更新,并且一直返回相同的值。
这是我尝试过的一些代码:
from multiprocessing import Process
from time import sleep
class Carrier(): # Empty object to exchange data
pass
def test():
global carry
while True:
print(carry.content)
sleep(0.5)
carry = Carrier()
carry.content = "test" # Giving the value I want to share
p = Process(target=test, args=())
p.start()
while True:
carrier.content = input() # Change the value from the object
我也尝试过每次从内存中删除对象并在下一个循环中重新定义它,但似乎没有任何效果,而是保留了初始的“测试”值,即执行时存在的值。
解决方案
我假设您在 Windows 上运行该程序,因为您在程序中打开的子进程或线程独立于它们的父进程。所以你实际上不能像这样在进程之间共享数据。
在 Linux 上运行 python 时可以共享数据,因为生成的进程是父进程的子进程,它可以共享数据。
为了能够在父进程和子进程之间共享数据而不考虑底层操作系统,您可以查看此链接 -如何在 Python 进程之间共享数据?
推荐阅读
- jquery - 未捕获的 ReferenceError:使用 multiDatePicker 库时未定义 $?
- amazon-web-services - 来自另一个区域的 EC2 的 Aurora 连接
- gatsby - 使用 gatsby-source-contentful 时如何设置 GATSBY_CONTENTFUL_OFFLINE 标志
- ignite - Apache Ignite 节点无法集群 - 通信问题
- python-3.x - 文本规范化:Python 中的文本相似性。如何规范文本拼写不匹配?
- postgresql - 如何在 PostgreSQL 中获取包括今天在内的上周日?
- r - 计算一行与每组其余数据之间的差异
- java - 如何标记使用我的程序创建的文件
- aspnetboilerplate - 为什么这会引发 PK 重复错误?
- codeigniter - 如何在php javascript中的特定日子禁用按钮