您应该能够以非阻塞方式发出7K连接,然后等待它们。假设他们都成功了,他们所有人的等待时间将会重叠。这应该导致整体延迟小得多。
换句话说,尝试这样的事情:
for (i = 0; i < 7000; ++i) {
// Create socket
sock_array[i] = socket(PF_INET, SOCK_STREAM, 0);
// Set socket non-blocking
flags = fcntl(sock_array[i], F_GETFL, 0);
fcntl(sock_array[i], F_SETFL, flags | O_NONBLOCK);
// Do the connect
connect(sock_array[i], &sock_addr[i], sizeof sock_addr[i]);
}
for (i = 0; i < 7000; ++i) {
// Find out if connect completed.
getsockopt(s, SOL_SOCKET, SO_ERROR, &err, &len);
// Assuming err == 0, your connect to i-th host is done
}
实际上,在第一循环中,你将每个插槽添加到fd_set
并使用select
以确定每个connect
已完成(成功或不成功)。创建所有连接所需的时间应以最长建立的连接为界。 (添加错误处理等。)
我想延迟是因为等待时间。您可以使用'threading'模块 – lolopop
谢谢在等待python连接时执行代码。我会尝试。 – loveclassic