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)