python 底层原理processpoolexecutor_Python:如何使用带有ProcessPoolExecutor的外部队列?...

我最近开始使用Python的多线程和多处理特性。在

我尝试编写代码,它使用producer/consumer方法从JSON日志文件中读取块,将这些块作为事件写入队列,然后启动一组进程来轮询来自该队列的事件(文件块),并处理每个事件,并输出结果。在

我的意图是首先启动进程,让它们等待事件开始进入队列。在

我目前正在使用这个代码,它似乎可以工作,使用了一些我发现的示例:import re, sys

from multiprocessing import Process, Queue

def process(file, chunk):

f = open(file, "rb")

f.seek(chunk[0])

for entry in pat.findall(f.read(chunk[1])):

print(entry)

def getchunks(file, size=1024*1024):

f = open(file, "rb")

while True:

start = f.tell()

f.seek(size, 1)

s = f.readline() # skip forward to next line ending

yield start, f.tell() - start

if not s:

break

def processingChunks(queue):

while True:

queueEvent = queue.get()

if (queueEvent == None):

queue.put(None)

break

process(queueEvent[0], queueEvent[1])

if __name__ == "__main__":

testFile = "testFile.json"

pat = re.compile(r".*?\n")

queue = Queue()

for w in xrange(6):

p = Process(target=processingChunks, args=(queue,))

p.start()

for chunk in getchunks(testFile):

queue.put((testFile, chunk))

print(queue.qsize())

queue.put(None)

但是,我想学习如何使用同期期货ProcessPoolExecutor使用未来的结果对象以异步方式实现相同的结果。在

我的第一次尝试暗示使用一个外部队列,这个队列是用多进程管理器创建的,我将把它传递给进程进行轮询。在

然而,这似乎行不通,我认为这可能不是ProcessPoolExecutor设计的工作方式,因为它似乎使用它自己的内部队列。在

我用了这个代码:

^{pr2}$

我无法从中得到任何结果,所以很明显我做错了什么,而且这个概念有一些我不理解的地方。在

你们能帮我一把吗?我该怎么做?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值