Oct-26-2016, 03:13 PM
Good day,
I'm trying to run multiple SSH clients using AsyncSSH lib. This is an example from manual, which works fine:
So I tried to modify run_client() like this:
I'm trying to run multiple SSH clients using AsyncSSH lib. This is an example from manual, which works fine:
import asyncio, asyncssh async def run_client(host, command): async with asyncssh.connect(host) as conn: return await conn.run(command) async def run_multiple_clients(): # Put your lists of hosts here hosts = 5 * ['localhost'] tasks = (run_client(host, 'ls abc') for host in hosts) results = await asyncio.gather(*tasks, return_exceptions=True) for i, result in enumerate(results, 1): if isinstance(result, Exception): print('Task %d failed: %s' % (i, str(result))) elif result.exit_status != 0: print('Task %d exited with status %s:' % (i, result.exit_status)) print(result.stderr, end='') else: print('Task %d succeeded:' % i) print(result.stdout, end='') print(75*'-') asyncio.get_event_loop().run_until_complete(run_multiple_clients())The problem is, it is not possible to directly set connect timeout in run_client() function. However, the manual says:
Quote: asyncio calls can be wrapped in a call to asyncio.wait_for() or asyncio.wait() which takes a timeout and provides equivalent functionality.
So I tried to modify run_client() like this:
async def run_client(host, command): try: with (yield from asyncio.wait_for(asyncssh.connect('localhost'), timeout = 3)) as conn: return await conn.run(command) except TimeoutError: # handle connection timeoutBut it spits out a syntax error. I also tried countless variations of it, but still no luck. Could someone more knowledgeable help me to set the damn timeout?