Python 我可以让asyncio.sleep()睡眠一年吗?

Python 我可以让asyncio.sleep()睡眠一年吗?,python,python-3.x,python-asyncio,Python,Python 3.x,Python Asyncio,我想让asyncio.sleep()睡一年 大概是这样的: async def run(): #第一次印刷 打印('hi') #等一年 等待异步睡眠(31536000) #第二次印刷 打印('一年后你好') 很明显,我不能通过等待一年来测试它,但在理论上它可以做到吗?您也可以通过编写单元测试并模拟协同程序来测试这一点 # file1.py async def run(seconds): # first print print('hi') # wait a year await

我想让
asyncio.sleep()
睡一年

大概是这样的:

async def run():
#第一次印刷
打印('hi')
#等一年
等待异步睡眠(31536000)
#第二次印刷
打印('一年后你好')

很明显,我不能通过等待一年来测试它,但在理论上它可以做到吗?

您也可以通过编写单元测试并模拟协同程序来测试这一点

# file1.py
async def run(seconds):
  # first print
  print('hi')
  # wait a year
  await asyncio.sleep(seconds)
  # second print
  print('hi after a year')

我正在用AsyncMock()类模拟asyncio.sleep。

我真的不明白为什么不能。文档中没有说你不能。好吧,我试试。记住,你的程序必须运行一年以上才能得到第二次打印。这意味着没有关闭您的计算机,或者如果在服务器上,则没有服务器维护。虽然它可能会工作,但如果服务器终止或某些其他问题的守护进程恢复,它将破坏脚本…这确实是不现实的,试着使用类似cronjob的东西,您可以将其设置为在特定时间后运行,例如一周、一个月、一年等等?我真的在问。这是否只是好奇,是否可以使用
asyncio
或是否有真正的使用案例?如果是后者,那么还有其他方法可以实现它,这不是
asyncio
的真正设计目的。你模拟了你正在测试的东西!此测试无法证明任何内容。此外,
so\u async
未定义。so\u async应为>file1.run
# test_file1.py

import asyncio
from unittest import mock
from unittest.mock import patch

import pytest

import file1


class AsyncMock(mock.MagicMock):
    async def __call__(self, *args, **kwargs):
        return super(AsyncMock, self).__call__(*args, **kwargs)


class TestAsyncioSleep:
    @patch('file1.run', new_callable=AsyncMock)
    def test_fun(self, sleep_mock):
        event_loop = asyncio.get_event_loop()
        task = event_loop.run_until_complete(so_async.run(31536000))
        sleep_mock.assert_called_with(31536000)