python生成器使用场景桌面_Python – 如何更简洁地使用生成器?

(

Python 3)

我正在使用Python生成器从队列中读取消息.

在消费者读取队列消息之后,它需要能够告诉生成器在成功处理后删除队列消息.

为了将.send()发送到Python生成器,似乎我必须首先.send(None)到生成器.这使我的代码比我想象的要胖.

任何人都可以建议qconsumer.py用更少的代码行驱动生成器的方法吗?我已经确定了我希望消除的下面哪些行.

简而言之,我如何使下面的代码更紧凑,有关如何删除行的任何建议?

下面的代码是qconsumer.py:

from qserver import Qserver

myqserver = Qserver()

myproducer = myqserver.producer() # trying to eliminate this line

# first send to a generator must be None

myproducer.send(None) # trying to eliminate this line

for msg in myproducer:

# do something with message

print(msg)

if messageprocessok:

myproducer.send('delete')

下面的代码是qserver.py:

# -*- coding: utf-8 -*-

import boto

from boto.sqs.connection import SQSConnection

from boto.sqs.message import Message

QNAME = 'qinbound'

SQSREGION = 'us-west-1'

class Qserver():

"""A simple Q server."""

def __init__(self, qname=None, sqsregion=None):

self.qname = qname or QNAME

self.sqsregion = sqsregion or SQSREGION

self.sqsconn = boto.sqs.connect_to_region(self.sqsregion)

self.q_in = self.sqsconn.get_queue(self.qname)

def producer(self):

while True:

qmessage = self.q_in.read(wait_time_seconds=20)

if qmessage is None:

continue

action = (yield qmessage.get_body())

if action == 'delete':

# if processing completed ok, clear message from this queue

self.q_in.delete_message(qmessage)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值