質問編集履歴

2

changed statement

2022/07/31 08:59

投稿

alizona
alizona

スコア126

test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,8 @@
1
1
  作成したthreadsで queueを使った処理を始めて、処理が終わる前に、新たなthreadsを追加して、queueにアクセスしたいです。
2
2
 
3
+ queue.join()によって、全てのqueueが取り出されるまで処理がブロックされているのですが、queue.join()をつかわないと、そもそもqueueへのアクセスが開始できません。
4
+
3
- threadsがエラーで落ちることがあるので、そのthreadを追加でき仕組みを作りたいです。
5
+ queueアクセスを開始きて、その後も終了前queueにアクセスすにはどうすればいのしょうか?
4
- どなたかどのような技術を使えばいいのか、また可能なのか、方法等アドバイスいただきたいです。
5
- よろしくお願いします。
6
6
  ```python
7
7
  import queue
8
8
  import threading

1

added

2022/07/31 08:39

投稿

alizona
alizona

スコア126

test CHANGED
File without changes
test CHANGED
@@ -11,26 +11,63 @@
11
11
  def login(queue, driver_num):
12
12
  while True:
13
13
  task = queue.get()
14
- time.sleep(100)
14
+ time.sleep(2)
15
15
  queue.task_done()
16
16
  print(f'driver{driver_num} : task{task}')
17
17
 
18
18
  queue = queue.Queue()
19
+
19
- driver_num=1
20
+ def create_thread(driver_num):
20
- thread1 = threading.Thread(target=login, args=(queue, driver_num,), daemon=True)
21
+ thread = threading.Thread(target=login, args=(queue, driver_num,), daemon=True)
21
- thread1.start()
22
+ thread.start()
22
- driver_num=2
23
+
23
- thread2 = threading.Thread(target=login, args=(queue, driver_num,), daemon=True)
24
- thread2.start()
24
+ create_thread(1)
25
- driver_num=3
26
- thread3 = threading.Thread(target=login, args=(queue, driver_num,), daemon=True)
27
- thread3.start()
25
+ create_thread(2)
28
26
 
29
27
  f=open('data.txt')
30
28
  data_list=f.read()
31
29
  for data in data_list.split('\n'):
32
30
  if data!='':
33
31
  queue.put(data)
32
+ queue.join()
34
33
 
34
+ create_thread(3)
35
+
36
+ f=open('data.txt')
37
+ data_list=f.read()
38
+ for data in data_list.split('\n'):
39
+ if data!='':
40
+ queue.put(data)
35
41
  queue.join()
42
+
36
43
  ```
44
+ ```result
45
+ driver1 : taskA
46
+ driver2 : taskB
47
+ driver1 : taskC
48
+ driver2 : taskD
49
+ driver1 : taskE
50
+ driver2 : taskF
51
+ driver1 : taskG
52
+ driver2 : taskH
53
+ driver1 : taskI
54
+ driver2 : taskJ
55
+ driver2 : taskL
56
+ driver1 : taskK
57
+ driver2 : taskM
58
+ driver1 : taskN
59
+ driver2 : taskA
60
+ driver3 : taskB
61
+ driver1 : taskC
62
+ driver2 : taskD
63
+ driver3 : taskE
64
+ driver1 : taskF
65
+ driver2 : taskG
66
+ driver3 : taskH
67
+ driver1 : taskI
68
+ driver2 : taskJ
69
+ driver3 : taskK
70
+ driver1 : taskL
71
+ driver2 : taskM
72
+ driver3 : taskN
73
+ ```