我在 python 3.7 上有一个非常简单的脚本,不明白为什么它始终执行,而不是同时执行。错在哪里?这对于保持脚本结构保持原样非常重要,这意味着不要删除类和信号量,我需要在op(). 我试图玩self.op(),删除async,但结果相同。
import time
import asyncio
class Trader:
def __init__(self, ticker):
self.ticker = ticker
async def _init(self):
# asyncio.run(self.op())
await self.op()
print('{} ended'.format(self.ticker))
async def op(self):
a = range(1000000)
b = []
for i in a:
b.append(i*2)
async def fetch_tickers():
return await asyncio.gather(*(asyncio.ensure_future(safe_trader(ticker)) for ticker in ['A', 'B', 'C', 'D', 'E', 'F', 'G']))
async def safe_trader(ticker):
async with sem:
t = Trader(ticker)
return await t._init()
if __name__ == '__main__':
start_time = time.time()
sem = asyncio.Semaphore(10)
loop = asyncio.get_event_loop()
results = loop.run_until_complete(fetch_tickers())
print("%.2f execution seconds" % (time.time() - start_time))
结果:
A ended
B ended
C ended
D ended
E ended
F ended
G ended
0.82 execution seconds
如果我只留下 1 ticker A,那么我们有结果:
A ended
0.12 execution seconds