如何在python中同时打开2个URL
我试图找出一种方法,同时打开两个网址,以节省时间。 正如您在这里看到的,如果10.10.10.2是可访问的,那么程序将关闭,如果192.168.100.5是可访问的,那么程序将继续。 抱歉这个业余问题,伙计们,我对编程很陌生,所以对我放松点。 我下面的解决方案需要很多时间,因为它一个接一个地发生。 我正在用python编写一个小型检查工具,以查看设备是否具有正确的IP地址。因此,10.10.10.2中的设备出现故障,这是正确的IP地址192.168.100.5。 有8000多台设备需要测试,因此每台设备等待10秒的时间太长。 你们知道有其他方法可以同时调用两个不同的URL吗。 我读过关于线程的文章,但我真的不知道如何在这里应用它,如果有人能给我举一个例子,说明它是如何实现的,我将不胜感激。 快速总结应该是什么样子: 同时调用两个url,第一个响应的url决定python程序是否继续。 如果10.10.10.2可访问,则程序关闭,如果192.168.100.5可访问,则程序继续 代码示例可能是非常有用的如何在python中同时打开2个URL,python,python-3.x,python-multithreading,Python,Python 3.x,Python Multithreading,我试图找出一种方法,同时打开两个网址,以节省时间。 正如您在这里看到的,如果10.10.10.2是可访问的,那么程序将关闭,如果192.168.100.5是可访问的,那么程序将继续。 抱歉这个业余问题,伙计们,我对编程很陌生,所以对我放松点。 我下面的解决方案需要很多时间,因为它一个接一个地发生。 我正在用python编写一个小型检查工具,以查看设备是否具有正确的IP地址。因此,10.10.10.2中的设备出现故障,这是正确的IP地址192.168.100.5。 有8000多台设备需要测试,因此
try:
preflash = urllib.request.urlopen("http://10.10.10.2", timeout=10).getcode()
print("Web page status code:", preflash, "FAIL")
sys.exit(0)
except urllib.error.URLError:
correct = urllib.request.urlopen("http://192.168.100.5", timeout=10).getcode()
print("Web page status code:", correct)
print("IP address: 192.168.100.5 is reachable")
可以将aiohttp与asyncio一起使用
import asyncio
import aiohttp
async def download_file(session: aiohttp.ClientSession, url: str):
async with session.get(url) as response:
assert response.status == 200
# For large files use response.content.read(chunk_size) instead.
return url, await response.read()
async def download_multiple(session: aiohttp.ClientSession):
urls = (
'https://stackoverflow.com/',
'http://python.org',
)
download_futures = [download_file(session, url) for url in urls]
print('Results')
done, pending = await asyncio.wait(download_futures, return_when=asyncio.FIRST_COMPLETED)
for task in done:
print(task.result())
print("unfinished:", len(pending))
return [p.result()[0] for p in done]
async def main():
async with aiohttp.ClientSession() as session:
result = await download_multiple(session)
print('finished:', result)
asyncio.run(main())
您现在可以玩done和pending,done包含完成的第一个url,挂起其他url
main()是一个协同程序,由asyncio.run()运行。main()使用aiohttp管理异步请求,并等待多次下载。下载并创建未来(可等待对象)列表,然后使用asyncio.wait“运行”它们。这里的策略是在第一个返回时返回。wait返回两个任务列表,完成(已完成)和挂起(未完成)。然后第一个线程已完成,其他线程处于挂起状态。您是否尝试创建2个线程?AIOHTTP模块可以帮助您,它允许您同时进行aysnc和等待调用,以便在等待响应时调用1调用2调用