补充下:实际的代码大约是这样:
def __init__(self):
self.task = asyncio.create_task(start_task())
self.cancel_button.clicked.connect(self.task.cancel)
async def start_task(self):
async with httpx.AsyncClient() as client:
response = await client.get('
https://www.example.com/large_file.7z’)
async for chunk in response.aiter_bytes():
write_to_file(chunk)
- 来自 水木社区APP v3.5.6
【 在 hgoldfish 的大作中提到: 】
: 用 asyncio.Task 跑协程任务,我觉得最大的好处是可以随时中断任务:
:
: def __init__(self):
: self.task = self.start_task()
: self.cancel_button.clicked.connect(self.cancel_task)
:
: @qtinter.asyncslot
: async def start_task(self):
: await requests.get("https://example.com/large_file.7z")
:
: def cancel_task(self):
: self.task.throw(asyncio.CancelledError())
:
: 以前用线程的时候哪有这么方便。
:
: 注:以上是伪代码。
--
FROM 124.217.188.*