首页 > 解决方案 > 线程不放入队列

问题描述

我正在尝试生成多个等待 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

我在这里想念什么?

标签: pythonpython-3.xmultithreadingqueuemultiprocessing

解决方案


推荐阅读