Python 使用多处理和队列处理无穷无尽的数据流
我想使用Python2.7多处理软件包来处理无穷无尽的数据流。子进程将不断通过TCP/IP或UDP数据包接收数据,并立即将数据放入multiprocessing.Queue。但是,在一定的时间间隔内,比如说每500毫秒,我只想对用户指定的数据片段进行操作。比如说,最后200个数据包 我知道我可以在队列中放置()和get(),但是我如何才能在没有a)备份队列和b)保持线程安全的情况下创建该数据片呢 我认为我必须不断地使用另一个子进程从队列中获取(),以防止队列变满。然后我必须将数据存储在另一个数据结构(如列表)中,以构建用户指定的切片。但是数据结构可能不是线程安全的,因此听起来不是一个好的解决方案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)保持线程安全的情况下创建该数据片呢 我认为我必须不断地使用另一个子进程从队列中获取(),以防止队列变满。然后我必须将数据存储在另一个数据
是否有一些编程范例可以轻松实现我想做的事情?我查看了multiprocessing.Manager类,但不确定它是否有效。您可以按如下方式执行此操作:
- 使用
类的实例。调用方法threading.Lock
声明从某个线程以独占方式访问队列,并调用acquire
授予其他线程访问权限release
- 因为您希望不断收集输入,所以复制整个队列可能会非常昂贵。可能最快的方法是首先在一个队列中收集数据,而不是将其交换到另一个队列中,然后使用旧的队列将数据从另一个线程读取到应用程序中。使用锁实例保护交换,这样您就可以确保每当写入程序获取锁时,当前的“侦听器”队列就可以接收数据
- 如果只有最近的数据很重要,则使用两个循环缓冲区而不是队列,从而允许覆盖旧数据
- 使用
类的实例。调用方法threading.Lock
声明从某个线程以独占方式访问队列,并调用acquire
授予其他线程访问权限release
- 因为您希望不断收集输入,所以复制整个队列可能会非常昂贵。可能最快的方法是首先在一个队列中收集数据,而不是将其交换到另一个队列中,然后使用旧的队列将数据从另一个线程读取到应用程序中。使用锁实例保护交换,这样您就可以确保每当写入程序获取锁时,当前的“侦听器”队列就可以接收数据
- 如果只有最近的数据很重要,则使用两个循环缓冲区而不是队列,从而允许覆盖旧数据