您應該能夠以非阻塞方式發出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