前提
コルーチンの単体テストをコンソールでやると以下のようなエラーが発生しました。外部ターミナルではちゃんと動作しているようです。エラーの原因はプログラムにあるのでしょうか、それともspyder側の不具合なのでしょうか。回答よろしくお願いします。
実現したいこと
- エラーの原因を明らかにする
発生している問題・エラーメッセージ
spyderでの実行結果
RuntimeError: asyncio.run() cannot be called from a running event loop
外部ターミナルでの実行結果
0 150536.25519100984
該当のソースコード
python
1cities_data = read_tspfile() 2population = [] # [[経路],[経路],[経路]...[経路]] 3cities = [] # Cityオブジェクトを入れるリスト 4CITIES_N = len(cities_data) # 都市数 5 6 7class City: 8 def __init__(self,num,X,Y): 9 self.num = num 10 self.X = X 11 self.Y = Y 12 13 14class Route: 15 def __init__(self): 16 self.distance = 0 17 18 # 経路を作成(重複なしのランダム) 19 self.citynums = random.sample(list(range(CITIES_N)),CITIES_N) 20 21 22async def calc_distance(route_obj): 23 """ citynumsリストの各都市間の距離の総和を求める """ 24 route_obj.distance = 0 25 for i,num in enumerate(route_obj.citynums): 26 """ 27 1つ前の都市との距離を計算 28 i=0のとき、i-1は最後の都市(最後の都市からスタートへの距離) 29 """ 30 route_obj.distance += math.dist((cities[num].X, 31 cities[num].Y), 32 (cities[route_obj.citynums[i-1]].X, 33 cities[route_obj.citynums[i-1]].Y)) 34 35 36 37 38# citiesに読み込んだ座標を持つCityオブジェクトを入れる 39for i in range(CITIES_N): 40 cities.append(City(cities_data[i][0], 41 cities_data[i][1], 42 cities_data[i][2])) # num,X,Yの順 43 44 45# populationに個体を追加 46for i in range(2): 47 population.append(Route()) 48 49 50async def main(): 51 print(population[0].distance) 52 await calc_distance(population[0]) 53 print(population[0].distance) 54 55asyncio.run(main())

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。