
[英]Change label value with a function while using multiprocessing with tkinter
[英]How to dynamically change the value of variable in functions while using multiprocessing
我如何动态更改 lis 的值,以便每秒 output 一个列表,其中最后一个元素是前一个列表最后一个元素的 2 倍。
import time, multiprocessing
lis = [1, 2, 4]
def printer():
while True:
print(lis)
time.sleep(1)
def updater():
while True:
time.sleep(1)
lis.append(lis[-1]*2)
if __name__ == '__main__':
process1 = multiprocessing.Process(target=updater)
process2 = multiprocessing.Process(target=printer)
process1.start()
process2.start()
process1.join()
process2.join()
我需要 output 是这样的
[1, 2, 4]
[1, 2, 4, 8]
[1, 2, 4. 8. 16]
[1, 2, 4, 8, 16, 32]
.
.
但现在 output 是
[1, 2, 4]
[1, 2, 4]
[1, 2, 4]
[1, 2, 4]
.
.
我尝试使用global lis
,但也没有用。
您可以使用multiprocessing.Manager
实现所需的行为。
管理器提供了一种创建可以在不同进程之间共享的数据的方法。 您可以在此处阅读更多相关信息。
基于服务器进程部分的示例,您可以像这样重写代码:
import time, multiprocessing
def printer(_lis):
while True:
print(_lis)
time.sleep(1)
def updater(_lis):
while True:
time.sleep(1)
_lis.append(_lis[-1]*2)
if __name__ == '__main__':
with multiprocessing.Manager() as manager:
lis = manager.list([1, 2, 4])
process1 = multiprocessing.Process(target=updater, args=(lis,))
process2 = multiprocessing.Process(target=printer, args=(lis,))
process1.start()
process2.start()
process1.join()
process2.join()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.