Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用多处理和队列处理无穷无尽的数据流_Python_Python 2.7_Python Multiprocessing - Fatal编程技术网

Python 使用多处理和队列处理无穷无尽的数据流

Python 使用多处理和队列处理无穷无尽的数据流,python,python-2.7,python-multiprocessing,Python,Python 2.7,Python Multiprocessing,我想使用Python2.7多处理软件包来处理无穷无尽的数据流。子进程将不断通过TCP/IP或UDP数据包接收数据,并立即将数据放入multiprocessing.Queue。但是,在一定的时间间隔内,比如说每500毫秒,我只想对用户指定的数据片段进行操作。比如说,最后200个数据包 我知道我可以在队列中放置()和get(),但是我如何才能在没有a)备份队列和b)保持线程安全的情况下创建该数据片呢 我认为我必须不断地使用另一个子进程从队列中获取(),以防止队列变满。然后我必须将数据存储在另一个数据

我想使用Python2.7多处理软件包来处理无穷无尽的数据流。子进程将不断通过TCP/IP或UDP数据包接收数据,并立即将数据放入multiprocessing.Queue。但是,在一定的时间间隔内,比如说每500毫秒,我只想对用户指定的数据片段进行操作。比如说,最后200个数据包

我知道我可以在队列中放置()和get(),但是我如何才能在没有a)备份队列和b)保持线程安全的情况下创建该数据片呢

我认为我必须不断地使用另一个子进程从队列中获取(),以防止队列变满。然后我必须将数据存储在另一个数据结构(如列表)中,以构建用户指定的切片。但是数据结构可能不是线程安全的,因此听起来不是一个好的解决方案


是否有一些编程范例可以轻松实现我想做的事情?我查看了multiprocessing.Manager类,但不确定它是否有效。

您可以按如下方式执行此操作:

  • 使用
    threading.Lock
    类的实例。调用方法
    acquire
    声明从某个线程以独占方式访问队列,并调用
    release
    授予其他线程访问权限

  • 因为您希望不断收集输入,所以复制整个队列可能会非常昂贵。可能最快的方法是首先在一个队列中收集数据,而不是将其交换到另一个队列中,然后使用旧的队列将数据从另一个线程读取到应用程序中。使用锁实例保护交换,这样您就可以确保每当写入程序获取锁时,当前的“侦听器”队列就可以接收数据

  • 如果只有最近的数据很重要,则使用两个循环缓冲区而不是队列,从而允许覆盖旧数据


您可以按如下方式执行此操作:

  • 使用
    threading.Lock
    类的实例。调用方法
    acquire
    声明从某个线程以独占方式访问队列,并调用
    release
    授予其他线程访问权限

  • 因为您希望不断收集输入,所以复制整个队列可能会非常昂贵。可能最快的方法是首先在一个队列中收集数据,而不是将其交换到另一个队列中,然后使用旧的队列将数据从另一个线程读取到应用程序中。使用锁实例保护交换,这样您就可以确保每当写入程序获取锁时,当前的“侦听器”队列就可以接收数据

  • 如果只有最近的数据很重要,则使用两个循环缓冲区而不是队列,从而允许覆盖旧数据


欢迎来到SO。请在发布前阅读论坛中的提问。显示您尝试过的内容和不起作用的内容,请提供代码。避免基于广泛意见的查询。欢迎使用SO。请在发布前阅读论坛中的提问。显示您尝试过的内容和不起作用的内容,请提供代码。避免基于广泛意见的查询。