多处理只会停止处理更高的数量

时间:2019-03-23 18:47:24

标签: python-3.x multiprocessing

进程应该在将给定范围内的数字除以6时将其写入队列。这一切都很好,直到maxrange停止执行时才变得大于8231 + tr(进程数)(我得到的'做完了之后,最终答案永远不会到来。

我正在Windows 10上运行python 3.6。我尝试为添加的部分添加一个锁,但它没有任何改变。

from multiprocessing import Process, Queue

def f(q, x, y):
    for i in range(x, y):
        if i%6 == 0:
            q.put(i)
    print('DONE')


if __name__ == '__main__':
    tr = 6
    maxrange = 8238
    q = Queue()
    r1 = int(maxrange/tr)
    print('.')
    threads = []
    for x in range(0, tr):
        p = Process(target=f, args=(q,r1*x, r1*(x+1)))
        threads.append(p)
        p.start()
    for t in threads:
        t.join()

    while not q.empty():
        print(q.get())

我希望它能打印出该范围内所有可被6整除的自然数,但是某些过程永远无法完成。

0 个答案:

没有答案