我想同时发送一些HTTP请求。我使用Python的multiprocessing.dummy.Pool
来做到这一点。这是创建线程池的代码
p = Pool(len(users))
len(users))
只是请求的数量。
如您所见,我正在为每个请求创建一个线程。这是一个坏主意吗?我应该创建一小部分len(users))
线程吗?
答案 0 :(得分:1)
我个人建议根据multiprocessing.cpu_count()
的倍数进行调整;这是方法concurrent.futures.ThreadPoolExecutor
所使用的方法,使用5 * multiprocessing.cpu_count()
的理论,线程工作块很多,所以你想要比核心更多的线程;如果你有一个巨大的互联网管道,更高的倍数可能是有道理的。如果您愿意,可以将其限制为min(len(users), 5 * multiprocess.cpu_count())
(当您没有任务使其饱和时,可以避免分配太多线程。)
您不希望每个任务使用一个线程,因为线程和打开句柄有限制,在许多系统上可能会以相当低的值发生,并且如果您正在谈话,尝试一次执行所有操作都可能会破坏大约10,000多个请求。鉴于您的互联网连接可能无法从超出某一点的并行性中受益,您只会浪费更多线程的资源。