Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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_Multithreading_Multiprocessing_Httprequest - Fatal编程技术网

如何使用多处理/多线程使Python脚本更快?

如何使用多处理/多线程使Python脚本更快?,python,multithreading,multiprocessing,httprequest,Python,Multithreading,Multiprocessing,Httprequest,一般来说,我对Python和编程相当陌生。我已经编写了一个脚本来浏览一长串(约7000个)URL,并检查它们的状态,以找到任何断开的链接。可以预见,一个接一个地请求每个URL需要几个小时。我听说多处理(或多线程?)可以用来加快速度。最好的方法是什么?一次运行多少进程/线程?我是否必须创建批量URL以同时检查?问题的答案取决于进程是将大部分时间用于处理数据还是等待网络。如果是前者,则需要使用和生成与系统上的物理内核数量相同的进程。不要忘记为任务选择合适的算法。最后,如果所有其他方法都失败了,编码也

一般来说,我对Python和编程相当陌生。我已经编写了一个脚本来浏览一长串(约7000个)URL,并检查它们的状态,以找到任何断开的链接。可以预见,一个接一个地请求每个URL需要几个小时。我听说多处理(或多线程?)可以用来加快速度。最好的方法是什么?一次运行多少进程/线程?我是否必须创建批量URL以同时检查?

问题的答案取决于进程是将大部分时间用于处理数据还是等待网络。如果是前者,则需要使用和生成与系统上的物理内核数量相同的进程。不要忘记为任务选择合适的算法。最后,如果所有其他方法都失败了,编码也可以是一个可行的解决方案

如果您的程序很慢,因为它花费大量时间等待单个服务器响应,那么您可以使用或来并行网络访问。在这种情况下,您可以使用比物理处理器内核多得多的线程,因为大多数时候,您的内核都在等待有趣的事情发生。您需要测量机器上的结果,以找出适合您的最佳线程数


无论您做什么,请确保您的程序不会用大量并发或重复的请求敲打远程服务器。

问题的答案取决于进程是将大部分时间用于处理数据还是等待网络。如果是前者,则需要使用和生成与系统上的物理内核数量相同的进程。不要忘记为任务选择合适的算法。最后,如果所有其他方法都失败了,编码也可以是一个可行的解决方案

如果您的程序很慢,因为它花费大量时间等待单个服务器响应,那么您可以使用或来并行网络访问。在这种情况下,您可以使用比物理处理器内核多得多的线程,因为大多数时候,您的内核都在等待有趣的事情发生。您需要测量机器上的结果,以找出适合您的最佳线程数


无论您做什么,请确保您的程序不会用大量并发或重复的请求攻击远程服务器。

这是一个非常广泛的问题。我需要一本小书来回答。我建议您先阅读一些python文档中关于多线程的内容,然后带着更具体的问题回到我们这里。的文档附带了一些有用的示例。我希望这里的人能够解释一些基础知识,因为大多数库的文档对新手来说都是非常令人畏惧的。@Abbie StackOverflow不是这样工作的。人们期望提出一个具体的问题,以得到得到支持的答案。解释未指定库的“基础知识”适用于专门记录这些库的网站,而不是问答网站。这是一个非常广泛的问题。我需要一本小书来回答。我建议您先阅读一些python文档中关于多线程的内容,然后带着更具体的问题回到我们这里。的文档附带了一些有用的示例。我希望这里的人能够解释一些基础知识,因为大多数库的文档对新手来说都是非常令人畏惧的。@Abbie StackOverflow不是这样工作的。人们期望提出一个具体的问题,以得到得到支持的答案。解释未指定库的“基础知识”适用于专门记录这些库的站点,而不是问答站点。注意:如果您编写代码时假设您将使用
多处理
模块(并使您的工作人员不依赖共享数据),通过将
import multiprocessing
更改为
import multiprocessing.dummy作为multiprocessing
,您可以轻松地将代码从进程切换到线程
multiprocessing.dummy
是使用线程而不是进程实现的
multiprocessing
API,因此您可以使用类似
multiprocessing.Pool
的东西,它将无缝地使用线程。用于将进程与线程进行比较。注意:如果您编写代码时假设您将使用
多处理
模块(并使您的工作人员不依赖共享数据),通过将
import multiprocessing
更改为
import multiprocessing.dummy作为multiprocessing
,您可以轻松地将代码从进程切换到线程
multiprocessing.dummy
是使用线程而不是进程实现的
multiprocessing
API,因此您可以使用类似
multiprocessing.Pool
的东西,它将无缝地使用线程。用于将进程与线程进行比较。