我应该为每个HTTP请求使用一个工作线程

时间:2017-10-25 02:35:33

标签: python multithreading python-requests

我想同时发送一些HTTP请求。我使用Python的multiprocessing.dummy.Pool来做到这一点。这是创建线程池的代码

p = Pool(len(users))

len(users))只是请求的数量。

如您所见,我正在为每个请求创建一个线程。这是一个坏主意吗?我应该创建一小部分len(users))线程吗?

1 个答案:

答案 0 :(得分:1)

我个人建议根据multiprocessing.cpu_count()的倍数进行调整;这是方法concurrent.futures.ThreadPoolExecutor所使用的方法,使用5 * multiprocessing.cpu_count()的理论,线程工作块很多,所以你想要比核心更多的线程;如果你有一个巨大的互联网管道,更高的倍数可能是有道理的。如果您愿意,可以将其限制为min(len(users), 5 * multiprocess.cpu_count())(当您没有任务使其饱和时,可以避免分配太多线程。)

您不希望每个任务使用一个线程,因为线程和打开句柄有限制,在许多系统上可能会以相当低的值发生,并且如果您正在谈话,尝试一次执行所有操作都可能会破坏大约10,000多个请求。鉴于您的互联网连接可能无法从超出某一点的并行性中受益,您只会浪费更多线程的资源。

相关问题