python - 在旧功能仍在运行时启动新的异步功能
问题描述
all函数创建一个没有可用股票的股票列表。然后它运行alert,一个循环函数,在库存可用时提醒我。我需要同时运行所有这些警报循环,但在开始下一个循环之前,所有这些都等待第一批库存可用。
我尝试使用线程为每个股票创建一个线程,但我无法等待 Thread.start()
async def all(self, ctx):
stocks = requests.get(f'https://api.torn.com/torn/?
selections=stocks&key={api}').json()['stocks']
zero = []
acronymz = []
for items in stocks:
if stocks[items]['available_shares'] == 0:
zero.append(items)
acronymz.append(stocks[items]['acronym'])
await ctx.send(f'Zero: {zero}')
for acronyms in zero:
print(acronyms)
# Thread(target=alert, args=(ctx, acronyms)).start()
await alert(ctx, acronyms)
# await asyncio.sleep(0.5)
async def alert(ctx, items):
stocks = requests.get(f'https://api.torn.com/torn/?selections=stocks&key={api}').json()['stocks'][items]
if stocks['available_shares'] == 0:
await ctx.send(f'I am now watching {stocks["acronym"]}. I will let you know when there are shares available!')
while stocks['available_shares'] == 0:
stocks = requests.get(f'https://api.torn.com/torn/?selections=stocks&key={api}').json()['stocks'][items]
print(stocks)
await asyncio.sleep(5)
await ctx.send(f'There are {stocks["available_shares"]} in {stocks["acronym"]}')
股票 = https://pastebin.com/FhuR4d4R [“股票”]
解决方案
您可以为事件循环安排任务,而无需await
立即执行它们。这是一个使用示例asyncio.gather
await asyncio.gather(*(alert(ctx, acronyms) for acronyms in zero))
推荐阅读
- r - DTedit 和 Shiny:如何根据另一个表的选定行在表上显示特定数据?
- ms-word - WordApi 1.3 与批量许可 Office 2016 不兼容
- pandas - 我试图找到每组最后一次出现的原始索引值
- c# - 如何将 SQL Server 中的 varchar(20) 转换为 C# 中的 datetime?
- sql - 构建多语言 SQLite 数据库的最高效方式是什么?
- javascript - 使用 node.js 获取 Steam 社区市场价格历史
- python-3.x - 如何使用 Python 3 向 LabVIEW 文件添加注释
- javascript - 如何在 Chart.js 中集成 Chart.Funnel.js
- python - 我如何能够将不同列表的项目一起输出?
- java - Jackson Converter - Web 服务混合了驼峰式大小写和下划线 - 我可以使用多极命名策略吗