回答編集履歴

13

一時変数var削除

2022/02/01 03:21

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -131,4 +131,46 @@
131
131
  pass
132
132
  ```
133
133
 
134
+ 少し簡略化
134
135
 
136
+ ```py
137
+ import asyncio
138
+
139
+
140
+ async def main():
141
+ var = 'おはよう'
142
+ task1 = None
143
+
144
+ while True:
145
+ if task1 is None:
146
+ task1 = asyncio.create_task(coro_1())
147
+ task2 = asyncio.create_task(coro_2(var))
148
+ task3 = asyncio.create_task(coro_3())
149
+ if task1.done():
150
+ var = await task1
151
+ task1 = None
152
+ await task2
153
+ await task3
154
+
155
+
156
+ async def coro_1():
157
+ await asyncio.sleep(3)
158
+ return 'こんばんは'
159
+
160
+
161
+ async def coro_2(var):
162
+ await asyncio.sleep(1)
163
+ print(var)
164
+
165
+
166
+ async def coro_3():
167
+ await asyncio.sleep(1)
168
+ print('こんにちは')
169
+
170
+
171
+ try:
172
+ asyncio.run(main())
173
+ except KeyboardInterrupt:
174
+ pass
175
+ ```
176
+

12

一時変数varへの代入をやめる

2022/02/01 03:14

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -23,8 +23,7 @@
23
23
 
24
24
  async def coro_1():
25
25
  await asyncio.sleep(3)
26
- var = 'こんばんは'
26
+ return 'こんばんは'
27
- return var
28
27
 
29
28
 
30
29
  async def coro_2(var):
@@ -113,8 +112,7 @@
113
112
 
114
113
  async def coro_1():
115
114
  await asyncio.sleep(3)
116
- var = 'こんばんは'
115
+ return 'こんばんは'
117
- return var
118
116
 
119
117
 
120
118
  async def coro_2(var):

11

print(val) を削除

2022/02/01 03:04

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -63,8 +63,7 @@
63
63
 
64
64
  async def coro_1():
65
65
  await asyncio.sleep(3)
66
- var = 'こんばんは'
66
+ return 'こんばんは'
67
- return var
68
67
 
69
68
 
70
69
  async def coro_2(var):

10

文章修正

2022/02/01 02:36

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -102,7 +102,6 @@
102
102
  task3 = asyncio.create_task(coro_3())
103
103
  if task1.done():
104
104
  var = await task1
105
- print(var)
106
105
  task1 = None
107
106
  if task2.done():
108
107
  await task2

9

文章変更

2022/02/01 00:32

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -83,7 +83,7 @@
83
83
  pass
84
84
  ```
85
85
 
86
- Taskが終わっていたらawaitするようにしてみたら望みの動作になりますか?
86
+ Taskが終わっていたらawaitするようにしたら望みの動作になりますか?
87
87
 
88
88
  ```py
89
89
  import asyncio

8

Taskが終わっていたらawaitするようにする処理を追記

2022/02/01 00:18

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -83,7 +83,7 @@
83
83
  pass
84
84
  ```
85
85
 
86
- Taskが終わっていたらawaitするようにしてみる。
86
+ Taskが終わっていたらawaitするようにしてみたら望みの動作になりますか?
87
87
 
88
88
  ```py
89
89
  import asyncio

7

最初におはようを表示する方法を追記

2022/02/01 00:17

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -83,4 +83,56 @@
83
83
  pass
84
84
  ```
85
85
 
86
+ Taskが終わっていたらawaitするようにしてみる。
86
87
 
88
+ ```py
89
+ import asyncio
90
+
91
+
92
+ async def main():
93
+ var = 'おはよう'
94
+ task1 = task2 = task3 = None
95
+
96
+ while True:
97
+ if task1 is None:
98
+ task1 = asyncio.create_task(coro_1())
99
+ if task2 is None:
100
+ task2 = asyncio.create_task(coro_2(var))
101
+ if task3 is None:
102
+ task3 = asyncio.create_task(coro_3())
103
+ if task1.done():
104
+ var = await task1
105
+ print(var)
106
+ task1 = None
107
+ if task2.done():
108
+ await task2
109
+ task2 = None
110
+ if task3.done():
111
+ await task3
112
+ task3 = None
113
+ await asyncio.sleep(0.1)
114
+
115
+
116
+ async def coro_1():
117
+ await asyncio.sleep(3)
118
+ var = 'こんばんは'
119
+ return var
120
+
121
+
122
+ async def coro_2(var):
123
+ await asyncio.sleep(1)
124
+ print(var)
125
+
126
+
127
+ async def coro_3():
128
+ await asyncio.sleep(1)
129
+ print('こんにちは')
130
+
131
+
132
+ try:
133
+ asyncio.run(main())
134
+ except KeyboardInterrupt:
135
+ pass
136
+ ```
137
+
138
+

6

説明変更

2022/01/31 23:57

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -43,3 +43,44 @@
43
43
  pass
44
44
  ```
45
45
 
46
+ こうすれば最初の1回だけ `'おはよう'` が表示されます。
47
+
48
+ ```py
49
+ import asyncio
50
+
51
+
52
+ async def main():
53
+ var = 'おはよう'
54
+
55
+ while True:
56
+ task1 = asyncio.create_task(coro_1())
57
+ task2 = asyncio.create_task(coro_2(var))
58
+ task3 = asyncio.create_task(coro_3())
59
+ var = await task1
60
+ await task2
61
+ await task3
62
+
63
+
64
+ async def coro_1():
65
+ await asyncio.sleep(3)
66
+ var = 'こんばんは'
67
+ return var
68
+
69
+
70
+ async def coro_2(var):
71
+ await asyncio.sleep(1)
72
+ print(var)
73
+
74
+
75
+ async def coro_3():
76
+ await asyncio.sleep(1)
77
+ print('こんにちは')
78
+
79
+
80
+ try:
81
+ asyncio.run(main())
82
+ except KeyboardInterrupt:
83
+ pass
84
+ ```
85
+
86
+

5

説明追記

2022/01/31 18:17

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,9 +1,9 @@
1
- `var = task1` で `おはよう` が入っている変数が上書きされてしまうので、`おはよう` が表示されることはありませんね。
1
+ `var = task1` で `おはよう` が入っている変数が上書きされてしまうので、`おはよう` がprintされることはありませんね。
2
2
 
3
3
  > (おはよう→こんにちは→おはよう→こんにちは→こんばんは)のようにprintされると考えていました。
4
4
 
5
5
  おはよう→こんにちは→こんばんは→おはよう→こんにちは→こんばんは の順ではないですか?
6
- これでどうでしょうか?
6
+ それならこれでどうでしょうか?
7
7
 
8
8
  ```py
9
9
  import asyncio

4

表示内容修正

2022/01/31 18:16

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,3 +1,5 @@
1
+ `var = task1` で `おはよう` が入っている変数が上書きされてしまうので、`おはよう` が表示されることはありませんね。
2
+
1
3
  > (おはよう→こんにちは→おはよう→こんにちは→こんばんは)のようにprintされると考えていました。
2
4
 
3
5
  おはよう→こんにちは→こんばんは→おはよう→こんにちは→こんばんは の順ではないですか?

3

インデント修正

2022/01/31 17:53

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -14,8 +14,7 @@
14
14
  task1 = asyncio.create_task(coro_1())
15
15
  task2 = asyncio.create_task(coro_2(var))
16
16
  task3 = asyncio.create_task(coro_3())
17
- var = await task1
17
+ print(await task1)
18
- print(var)
19
18
  await task2
20
19
  await task3
21
20
 

2

説明修正

2022/01/31 17:52

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -6,16 +6,18 @@
6
6
  ```py
7
7
  import asyncio
8
8
 
9
+
9
10
  async def main():
10
- var = 'おはよう'
11
+ var = 'おはよう'
11
12
 
12
- while True:
13
+ while True:
13
- task1 = asyncio.create_task(coro_1())
14
+ task1 = asyncio.create_task(coro_1())
14
- task2 = asyncio.create_task(coro_2(var))
15
+ task2 = asyncio.create_task(coro_2(var))
15
- task3 = asyncio.create_task(coro_3())
16
+ task3 = asyncio.create_task(coro_3())
16
- print(await task1)
17
+ var = await task1
18
+ print(var)
17
- await task2
19
+ await task2
18
- await task3
20
+ await task3
19
21
 
20
22
 
21
23
  async def coro_1():
@@ -34,7 +36,6 @@
34
36
  print('こんにちは')
35
37
 
36
38
 
37
-
38
39
  try:
39
40
  asyncio.run(main())
40
41
  except KeyboardInterrupt:

1

2022/01/31 17:49

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,6 +1,6 @@
1
1
  > (おはよう→こんにちは→おはよう→こんにちは→こんばんは)のようにprintされると考えていました。
2
2
 
3
- おはよう→こんにちは→こんばんは→おはよう→こんにちは→こんばんは じゃないですか?
3
+ おはよう→こんにちは→こんばんは→おはよう→こんにちは→こんばんは の順ではないですか?
4
4
  これでどうでしょうか?
5
5
 
6
6
  ```py