Предположим, у меня есть синхронная программа Python старого стиля с ошибкой: р>
Код: Выделить всё
def listdir(self, remote_path):
with ssh.connect(self.connection_settings['host'], username=self.connection_settings['username'],
password=self.connection_settings['password']) as conn:
with conn.start_sftp_client() as sftp:
sftp.chdir(remote_path) # breakpoint here
files = sftp.readdir()
files_name = [file.filename for file in files]
return files_name
а затем отладил свои проблемы во время выполнения:
Код: Выделить всё
> sftp.getcwd()
bad_user_location
> sftp.chdir(good_base_location)
> sftp.readdir()
Теперь у меня есть асинхронная программа:
Код: Выделить всё
async def listdir(self, remote_path):
async with asyncssh.connect(self.connection_settings['host'], username=self.connection_settings['username'],
password=self.connection_settings['password']) as conn:
async with conn.start_sftp_client() as sftp:
await sftp.chdir(remote_path) # breakpoint here
files = await sftp.readdir()
files_name = [file.filename for file in files]
return files_name
а затем отлаживаю свои проблемы во время выполнения:
Код: Выделить всё
> sftp.getcwd()
Я установил IPython 7, который поддерживает event_loop, но он не запускает задачу, просто добавляется в цикл событий, поскольку он создан для Jupyter, а не для этого варианта использования.
[*]Я попробовал создать новое событие цикл, но в потоке может быть только один.
[*]Я пробовал использовать negest_asyncio и применить, но >[code]nest_asyncio.events.new_event_loop().create_task(sftp.getcwd())
0 # exit code
[/code]
Я нашел в Channels v2.0 что-то подобное в замечательной статье Эндрю Гадвинса
Код: Выделить всё
>asgiref.sync.async_to_sync(sftp.getcwd())
> ... created at :1> was never yielded from
>ERROR:asyncio:
Подробнее здесь: [url]https://stackoverflow.com/questions/61771874/debugging-an-async-program-in-the-pycharm-debugger[/url]