首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中读取不断更新的列表

在python中读取不断更新的列表
EN

Stack Overflow用户
提问于 2020-11-30 21:08:56
回答 1查看 186关注 0票数 0

我的目标是从python中的一个列表中读取值,该列表由另一个进程不断更新,在这里我已经尝试做了一个最小的工作代码。我在cfg.py中有一个全局数组,定义为

代码语言:javascript
复制
def initialize():
    global infrared_frames
    global depth_frames
    infrared_frames = []
    depth_frames = []

main.py中,一个线程在该数组中附加一个随机值,而主线程休眠10秒,然后从该数组中读取值。这是代码-

代码语言:javascript
复制
from multiprocessing import Process
import random
import time
import cfg

cfg.initialize()

def update_array():
    while True:
        cfg.infrared_frames.append(random.random())

p1 = Process(target=update_array)
p1.start()
time.sleep(10)
print('starting to read array')
print(cfg.infrared_frames)
for a in cfg.infrared_frames:
    print(a)

不幸的是,当我试图在循环之前和time.sleep()调用之后打印数组时,数组仍然是空的,但p1进程正在运行。为什么我不能读取数组?抱歉,如果这是一个简单的问题,我的知识是有限的,当涉及到python线程提前感谢。T

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-30 22:15:20

在多处理中添加和使用数据的一个好方法是使用Queue

一个最小的工作示例:

代码语言:javascript
复制
import time
import multiprocessing as mp

from multiprocessing.queues import Queue


def fill_queue(queue):
    """ Endless process that fills the queue"""
    task = 0
    while True:
        time.sleep(1)
        queue.put(task)
        print(f"Added task {task}")
        task += 1


def read_queue(queue):
    """ Endless process that reads from the queue """
    while True:
        if queue.empty():
            time.sleep(0.2)
        else:
            print(f"Handling task: {queue.get()}")


if __name__ == '__main__':
    queue = Queue(maxsize=-1, ctx=mp.get_context())
    task_fill_queue = mp.Process(target=fill_queue, args=(queue,))
    task_fill_queue.start()

    read_queue(queue)

解释

fill_queue函数每秒都会向队列中添加数据。然后,这将由read_queue函数处理。它将每隔0.2秒检查一次队列中是否有新项目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65074212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档