python - 线程不放入队列
问题描述
我正在尝试生成多个等待 time.sleep 的线程并将随机数放入队列中。然后从队列中取出这些数字并除以 10000。
但这不起作用,当 time.sleep 等于 0 时,随机数正确插入队列中,但是,当 time.sleep 大于 0 时,这些队列中没有任何内容。
import random
import time
import os
from threading import Thread
from multiprocessing import Process, Queue
class Tempo(Thread):
def __init__ (self, queue):
Thread.__init__(self)
self._queue = queue
def run (self):
temporisation = random.randrange(0,4)
time.sleep(temporisation)
rand_range = random.randrange(0,1000)
self._queue.put(rand_range)
os.sys.stdout.write(str(rand_range) + " : time sleep : " + str(temporisation) + " put in queue\n")
os.sys.stdout.flush()
def tempo_x(range_haute, queue):
for x in range(0,range_haute):
Tempo(queue).start()
queue.put('exit')
def divise_10000(queue):
time.sleep(5)
while True:
rand_range = queue.get()
if isinstance(rand_range, int):
os.sys.stdout.write(str(rand_range/10000) + "\n")
os.sys.stdout.flush()
else:
break
if __name__ == '__main__':
queue = Queue()
get_process = Process(target=divise_10000, args=((queue),))
get_process.daemon = True
get_process.start()
tempo_x(10, queue)
get_process.join()
输出 :
230 : time sleep : 0 put in queue
92 : time sleep : 0 put in queue
763 : time sleep : 0 put in queue
881 : time sleep : 0 put in queue
213 : time sleep : 1 put in queue
124 : time sleep : 1 put in queue
584 : time sleep : 1 put in queue
57 : time sleep : 2 put in queue
583 : time sleep : 2 put in queue
735 : time sleep : 3 put in queue
0.023
0.0092
0.0763
0.0881
我在这里想念什么?
解决方案
推荐阅读
- informix - Informix IDS:DB_LOCALE 与 GL_COLLATE、GL_CTYPE
- sql-server - 如何对除主键以外的其他内容求和?
- python - 使用 sklearn.utils.shuffle 编译 python 代码时出错
- c# - Selenium - 更改页面加载
- java - Java:运行控制台命令并保持控制台运行以获取更多控制台命令
- python - 如何从 Anaconda 导入 Python 包
- javascript - Array.prototype.some() 异步
- android - Android FirebaseUI:用另一个谷歌账户登录很麻烦
- firebase-realtime-database - 如何有效地从 Firebase 实时数据库中获取 7 天、30 天的摘要?
- python - 反向单链表(不知道为什么我的代码是错误的)