Python线程和队列

Python线程和队列,python,multithreading,Python,Multithreading,我真的需要回答一个一般性的问题。我有一个脚本,现在使用线程来访问1000台设备并从中获取信息。我现在要求每天以相同的顺序获取这些信息 因此,我需要从我的列表中提取信息,并每天以相同的顺序访问这些设备。我还必须以同样的顺序取回这些信息 我可以禁用线程来实现这一点,但是scrip需要几个小时才能运行。我可以使用什么类型的队列来保持线程化,但每次访问这些设备并以相同的顺序写入?这可能吗?您确定需要以相同的顺序访问设备吗?在这种情况下,根据定义,您不能使用任何并发 否则,模块的方法将完美地工作:它在一个

我真的需要回答一个一般性的问题。我有一个脚本,现在使用线程来访问1000台设备并从中获取信息。我现在要求每天以相同的顺序获取这些信息

因此,我需要从我的列表中提取信息,并每天以相同的顺序访问这些设备。我还必须以同样的顺序取回这些信息


我可以禁用线程来实现这一点,但是scrip需要几个小时才能运行。我可以使用什么类型的队列来保持线程化,但每次访问这些设备并以相同的顺序写入?这可能吗?

您确定需要以相同的顺序访问设备吗?在这种情况下,根据定义,您不能使用任何并发

否则,模块的方法将完美地工作:它在一个由N个线程或进程组成的池中并发执行一系列任务,并按照提供的相同顺序返回它们的结果

您甚至可以尝试使用
ProcessPoolExecutor
而不是
ThreadPoolExecutor
(它们是可交换的),看看它是否能进一步提高性能

有一个例子可以帮助你:(素数)


旧版本的Python提供了一个后端口。

这有利于以相同的顺序编写它们,但不利于以相同的顺序访问它们。如果确实需要按顺序访问它们,那么池就不会这样做。假设我在一个由3个工人组成的池中有a、b、c、d、e、f、g、h、I任务。取决于您如何设置chunksize以及给定操作的工作时间,g很可能在b之前执行。请停止传播您的无知。探索concurrent.futures,尝试上面提到的示例,看看它是否保留了顺序。您逻辑中的缺陷是,即使任务可能以任意顺序执行,也很容易将结果按顺序排列。我非常清楚地指出,问题在于访问。“即使任务可能以任意顺序执行…”-QED。所以,别再侮辱我了,处理好评论吧。按顺序访问它们是很难的。我假设并行运行速度要快得多,那么操作的哪一部分是昂贵的呢?您可以并行执行设置工作,但数据查询部分可以串行执行。不过不容易!我想最大的问题是每次都以相同的顺序获取信息。我正在获取信息并将其写入文件。然后,我使用difflib比较文件的更改。但我需要它在相同的顺序,否则它显示的文件是不同的每一次。我也看到了一些不应该出现的信息。(说设备有它没有的东西)在这种情况下,多处理池或线程池(在python 3中重命名并重新实现)及其
imap
方法可能会工作,因为它们在返回时保持顺序。另一个选项是向当前实现中添加序列号。完成后,您可以对文件进行排序并去除序列号以获得“可扩散”文件。如果您不想在内存中保存较大的信息集,那么这可能更可取。“信息进入不应该进入的地方”可能是多个线程写入同一个文件——您可以创建一个锁来控制文件的写入。