你用“python”标记了它,所以我假设在这里使用 Python 是一个选项。看看multiprocessing module。例如:
#!/usr/bin/env python
import multiprocessing
import os
import requests
import subprocess
addresses = ['1.2.3.4', '1.2.3.5', '4.2.2.1', '8.8.8.8']
null = open(os.devnull, 'w')
def fbstatus(count):
"""Returns the address, and True if the ping returned in under 5 seconds or
else False"""
return (count,
requests.get('http://www.facebook.com/status.php').status_code)
def ping(address):
"""Returns the address, and True if the ping returned in under 5 seconds or
else False"""
return address, not subprocess.call(['ping', '-c1', '-W5', address],
stdout=null)
pool = multiprocessing.Pool(15)
if False:
print pool.map(ping, addresses)
else:
pool.map(fbstatus, range(1000))
新功能 - 获取页面
fbstatus() 函数从 Facebook 获取页面。通过 30 个并发进程,这几乎与池的大小呈线性关系。它在我的笔记本电脑上的平均总运行时间约为 80 秒。在 30 名工人中,总共需要大约 3.75 秒才能完成。
旧 - Ping
这使用subprocess 模块调用ping 命令,超时时间为5 秒,计数为1。它使用ping 的返回值(0 表示成功,1 表示失败)并将其取反获取 False 表示失败和 True 表示成功。 ping() 函数返回调用它的地址加上布尔结果。
最后一位创建一个包含 5 个子进程的多处理池,然后对 addresses 中的每个值调用 ping()。由于ping() 返回了它的地址,因此很容易看到 ping 每个地址的结果。
运行它,我得到这个输出:
[('1.2.3.4', False), ('1.2.3.5', False), ('4.2.2.1', True), ('8.8.8.8', True)]
该运行花费了 5.039 秒的挂钟时间和 0% 的 CPU。换句话说,它几乎 100% 的时间都在等待ping 返回。在您的脚本中,您可能希望使用 Requests 之类的东西来获取您的提要 URL(而不是我作为示例使用的文字 ping 命令),但基本结构可能几乎相同。