Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中同时打开2个URL_Python_Python 3.x_Python Multithreading - Fatal编程技术网

如何在python中同时打开2个URL

如何在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多台设备需要测试,因此

我试图找出一种方法,同时打开两个网址,以节省时间。 正如您在这里看到的,如果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可访问,则程序继续

代码示例可能是非常有用的

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调用