【发布时间】:2018-06-05 09:26:18
【问题描述】:
我遵循post 中规定的原则来安全地输出最终将写入文件的结果。不幸的是,代码只打印 1 和 2,而不是 3 到 6。
import os
import argparse
import pandas as pd
import multiprocessing
from multiprocessing import Process, Queue
from time import sleep
def feed(queue, parlist):
for par in parlist:
queue.put(par)
print("Queue size", queue.qsize())
def calc(queueIn, queueOut):
while True:
try:
par=queueIn.get(block=False)
res=doCalculation(par)
queueOut.put((res))
queueIn.task_done()
except:
break
def doCalculation(par):
return par
def write(queue):
while True:
try:
par=queue.get(block=False)
print("response:",par)
except:
break
if __name__ == "__main__":
nthreads = 2
workerQueue = Queue()
writerQueue = Queue()
considerperiod=[1,2,3,4,5,6]
feedProc = Process(target=feed, args=(workerQueue, considerperiod))
calcProc = [Process(target=calc, args=(workerQueue, writerQueue)) for i in range(nthreads)]
writProc = Process(target=write, args=(writerQueue,))
feedProc.start()
feedProc.join()
for p in calcProc:
p.start()
for p in calcProc:
p.join()
writProc.start()
writProc.join()
在运行它打印的代码时,
$ python3 tst.py
Queue size 6
response: 1
response: 2
另外,是否可以确保写入函数始终输出 1、2、3、4、5、6,即按照将数据送入馈送队列的顺序?
【问题讨论】:
-
我的帖子回答你的问题了吗?
标签: python-3.x multiprocessing