質問編集履歴

3

編集ミス

2024/12/11 03:18

投稿

keruuuu
keruuuu

スコア17

test CHANGED
File without changes
test CHANGED
@@ -1 +1,90 @@
1
+ ### 実現したいこと
1
- 非同期ジェネレータでないジェネレータを利用して非同期処理を行う
2
+ 非同期ジェネレータでないジェネレータの戻り値を利用して非同期処理を行う
3
+ *generate_date()は非同期ジェネレータに変更できないことを前提としています。
4
+
5
+ ### 発生している問題・分からないこと
6
+ heavy_func()が呼び出されない
7
+
8
+
9
+
10
+ ### 該当のソースコード
11
+
12
+ ```python
13
+ import asyncio
14
+ import datetime as dt
15
+ import time
16
+
17
+
18
+ def main():
19
+ exec_time = dt.datetime.now()
20
+ print(f'{exec_time}, start')
21
+
22
+ data_list = generate_data()
23
+ asyncio.run(calc_from_data(data_list))
24
+
25
+
26
+ def generate_data():
27
+ data_list = [
28
+ {'key': 's1', 'val': 1.0},
29
+ {'key': 's2', 'val': 2.0},
30
+ {'key': 's3', 'val': 3.0},
31
+ ]
32
+
33
+ while True:
34
+ yield data_list[0]
35
+ yield data_list[1]
36
+ yield data_list[2]
37
+ time.sleep(10)
38
+
39
+
40
+ async def calc_from_data(data_list):
41
+ tasks = []
42
+ for data in data_list:
43
+ key = data['key']
44
+ val = data['val']
45
+ exec_time = dt.datetime.now()
46
+ print(f'{exec_time}, {key}: {val}')
47
+
48
+ loop = asyncio.get_event_loop()
49
+ task = loop.create_task(heavy_func(key, val))
50
+ tasks.append(task)
51
+
52
+ await asyncio.gather(*tasks)
53
+
54
+
55
+ async def heavy_func(key, val):
56
+ exec_time = dt.datetime.now()
57
+ print(f'{exec_time}, called, {key}: {val}')
58
+
59
+ # 何か重い処理
60
+ await asyncio.sleep(10)
61
+
62
+ exec_time = dt.datetime.now()
63
+ print(f'{exec_time}, end, {key}: {val}')
64
+
65
+
66
+ if __name__ == '__main__':
67
+ main()
68
+ ```
69
+
70
+ ```console
71
+ 2024-12-11 03:10:33.140207, start
72
+ 2024-12-11 03:10:33.140740, s1: 1.0
73
+ 2024-12-11 03:10:33.140784, s2: 2.0
74
+ 2024-12-11 03:10:33.140808, s3: 3.0
75
+ 2024-12-11 03:10:43.150936, s1: 1.0
76
+ 2024-12-11 03:10:43.151100, s2: 2.0
77
+ 2024-12-11 03:10:43.151130, s3: 3.0
78
+ ```
79
+
80
+ ### 試したこと・調べたこと
81
+ - [x] teratailやGoogle等で検索した
82
+ - [x] ソースコードを自分なりに変更した
83
+ - [ ] 知人に聞いた
84
+ - [ ] その他
85
+
86
+ ##### 上記の詳細・結果
87
+ 同様の問題が見つかりませんでした。
88
+
89
+ ### 補足
90
+ 特になし

2

編集ミス

2024/12/11 03:15

投稿

keruuuu
keruuuu

スコア17

test CHANGED
File without changes
test CHANGED
@@ -1,55 +1 @@
1
- import asyncio
2
- import datetime as dt
3
- import time
4
-
5
-
6
- def main():
7
- exec_time = dt.datetime.now()
8
- print(f'{exec_time}, start')
9
-
10
- data_list = generate_data()
11
- asyncio.run(calc_from_data(data_list))
12
-
13
-
14
- def generate_data():
15
- data_list = [
16
- {'key': 's1', 'val': 1.0},
17
- {'key': 's2', 'val': 2.0},
18
- {'key': 's3', 'val': 3.0},
19
- ]
20
-
21
- while True:
22
- yield data_list[0]
23
- yield data_list[1]
24
- yield data_list[2]
25
- time.sleep(10)
26
-
27
-
28
- async def calc_from_data(data_list):
29
- tasks = []
30
- for data in data_list:
31
- key = data['key']
32
- val = data['val']
33
- exec_time = dt.datetime.now()
34
- print(f'{exec_time}, {key}: {val}')
35
-
36
- loop = asyncio.get_event_loop()
1
+ 非同期ジェネレータでないジェネレータを利用して非同期処理を行う
37
- task = loop.create_task(heavy_func(key, val))
38
- tasks.append(task)
39
-
40
- await asyncio.gather(*tasks)
41
-
42
-
43
- async def heavy_func(key, val):
44
- exec_time = dt.datetime.now()
45
- print(f'{exec_time}, called, {key}: {val}')
46
-
47
- # 何か重い処理
48
- await asyncio.sleep(10)
49
-
50
- exec_time = dt.datetime.now()
51
- print(f'{exec_time}, end, {key}: {val}')
52
-
53
-
54
- if __name__ == '__main__':
55
- main()

1

typo

2024/12/11 03:14

投稿

keruuuu
keruuuu

スコア17

test CHANGED
File without changes
test CHANGED
@@ -1,15 +1,3 @@
1
- ### 実現したいこと
2
- 非同期ジェネレータでないジェネレータの戻り値を利用して非同期処理を行う
3
- *generate_date()は非同期ジェネレータに変更できないことを前提としています。
4
-
5
- ### 発生している問題・分からないこと
6
- heavy_func()が呼び出されない
7
-
8
-
9
-
10
- ### 該当のソースコード
11
-
12
- ```python
13
1
  import asyncio
14
2
  import datetime as dt
15
3
  import time
@@ -59,31 +47,9 @@
59
47
  # 何か重い処理
60
48
  await asyncio.sleep(10)
61
49
 
50
+ exec_time = dt.datetime.now()
62
51
  print(f'{exec_time}, end, {key}: {val}')
63
52
 
64
53
 
65
54
  if __name__ == '__main__':
66
55
  main()
67
- ```
68
-
69
- ```console
70
- 2024-12-11 03:10:33.140207, start
71
- 2024-12-11 03:10:33.140740, s1: 1.0
72
- 2024-12-11 03:10:33.140784, s2: 2.0
73
- 2024-12-11 03:10:33.140808, s3: 3.0
74
- 2024-12-11 03:10:43.150936, s1: 1.0
75
- 2024-12-11 03:10:43.151100, s2: 2.0
76
- 2024-12-11 03:10:43.151130, s3: 3.0
77
- ```
78
-
79
- ### 試したこと・調べたこと
80
- - [x] teratailやGoogle等で検索した
81
- - [x] ソースコードを自分なりに変更した
82
- - [ ] 知人に聞いた
83
- - [ ] その他
84
-
85
- ##### 上記の詳細・結果
86
- 同様の問題が見つかりませんでした。
87
-
88
- ### 補足
89
- 特になし