【python】kafka在与celery和gevent连用时遇到的问题
前提:kafka有同步,多线程,gevent异步和rdkafka异步四种模式。但是在与celery和gevent连用的时候,有的模式会出错。
下面是我代码运行的结果。
结论:使用多线程方式!
使用同步方式可以成功发送数据
def send_data_kafka(data):
try:
client = KafkaClient(hosts=broker_list)
topic = client.topics[topic_name]
with topic.get_sync_producer() as producer:
for d in data:
print "send data"
msg = json.dumps(d)
producer.produce(msg)
producer.stop()
except Exception, e:
LOGGER.exception("error in send_data_kafka")
print e
使用rdkafka异步,只打印了一条send data之后卡住
def send_data_kafka(data):
try:
client = KafkaClient(hosts=broker_list)
topic = client.topics[topic_name]
with topic.get_producer(use_rdkafka=True) as producer:
for d in data:
print "send data"
msg = json.dumps(d)
producer.produce(msg)
producer.stop()
except Exception, e:
LOGGER.exception("error in send_data_kafka")
print e
使用多线程,可以正常生产所有数据
def send_data_kafka(data):
try:
client = KafkaClient(hosts=broker_list)
topic = client.topics[topic_name]
with topic.get_producer() as producer:
for d in data:
print "send data"
msg = json.dumps(d)
producer.produce(msg)
producer.stop()
except Exception, e:
LOGGER.exception("error in send_data_kafka")
print e
没有用with,rdkafka异步,打印了所有的send data,后卡住
client = KafkaClient(hosts=broker_list)
topic = client.topics[topic_name]
producer = topic.get_producer(use_rdkafka=True) # 异步,使用rdkafka库,速度最快的方案 def send_data_kafka(data):
try:
for d in data:
print "send data"
msg = json.dumps(d)
producer.produce(msg)
producer.stop()
except Exception, e:
LOGGER.exception("error in send_data_kafka")
print e
【python】kafka在与celery和gevent连用时遇到的问题的更多相关文章
- python kafka client--confluent-kafka-python
项目中需要使用python 向Kafka生产和消费数据,最初使用pykafka .后来发现pykafka不支持client.id. 最后,终于找到confluent-kafka. python kaf ...
- Python 并行分布式框架 Celery
Celery 简介 除了redis,还可以使用另外一个神器---Celery.Celery是一个异步任务的调度工具. Celery 是 Distributed Task Queue,分布式任务队列,分 ...
- Python学习笔记 - day14 - Celery异步任务
Celery概述 关于celery的定义,首先来看官方网站: Celery(芹菜) 是一个简单.灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具. 简单来看,是一个基于pyt ...
- python协程详解,gevent asyncio
python协程详解,gevent asyncio 新建模板小书匠 #协程的概念 #模块操作协程 # gevent 扩展模块 # asyncio 内置模块 # 基础的语法 1.生成器实现切换 [1] ...
- Python Kafka Client 性能测试
一.前言 由于工作原因使用到了 Kafka,而现有的代码并不能满足性能需求,所以需要开发高效读写 Kafka 的工具,本文是一个 Python Kafka Client 的性能测试记录,通过本次测试, ...
- 【转】Python 并行分布式框架 Celery
原文链接:https://blog.csdn.net/freeking101/article/details/74707619 Celery 官网:http://www.celeryproject.o ...
- 【python小随笔】celery异步任务与调用返回值
s1.py(配置任务文件) from celery import Celery import time my_task = Celery("tasks", broker=" ...
- Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题
Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题 问题描述: 我实在是太懒了,问题描述抄的网上的哈哈哈:https://www.jianshu.com/p/6ab7afa05 ...
- python远程调试及celery调试
部分来自 from: https://www.xncoding.com/2016/05/26/python/pycharm-remote.html 你是否经常要在Windows 7或MAC OS X上 ...
随机推荐
- Spark思维导图之Spark RDD
- ES6走一波 module
ES6模块设计思想: 尽量静态化,使得编译时就能确定模块的依赖关系,输入.输出的变量.可做静态优化. ES6模块不是对象,而是通过export命令显示指定输出的代码,再通过import命令输入 ex ...
- Python 20 Ajax全套
概述 对于web应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...
- 找出程序GasMileage中的哪一行与下列叙述相对应:
找出程序GasMileage中的哪一行与下列叙述相对应: a.通知程序将使用Scanner类 import java.util.Scannner; b.创建一个Scanner类的对象 Scan ...
- Django学习手册 - 权限管理(一)
权限管理原理: 不同角色拥有不同的角色权限,所以能否访问的页面也就不相同. 通过控制URL使用户访问到不同的URL,从而达到权限控制的目的. 设计权限数据库 权限管理 from django.db i ...
- Light oj 1021 - Painful Bases
题意: 给一个B进制的数,一个10进制的数K,B进制数有x位, 对着x位进行全排列的话,有x!种可能, 问这x!的可能中,有多少种可以整除K,各个位置上的数字都不同. 思路:状态压缩,数位DP #i ...
- python目标定位(借鉴csdn上大神)
写博客是为了记录下来,毕竟好多东西记不住,看过就忘了,收藏又太多,还不如搬运到自己博客下面,随时可翻~~~ 近期再学目标识别与定位,看着原理都很简单,但是真自己做,又觉得困难重重. csdn上一个大神 ...
- nginx Access-Control-Allow-Origin css跨域
问题原因:nginx 服务器 css 字体跨域 以及img相对路径 问题 描述:用nginx做页面静态化时遇到了两个问题 1.我有两个静态资源服务器 static.xxx.com 和 item.xx ...
- Python3学习笔记34-pymongo模块
pymongo模块是python操作mongo数据的第三方模块,记录一下自己常用到的简单用法. 首先需要连接数据库: MongoClient():该方法第一个参数是数据库所在地址,第二个参数是数据库所 ...
- where 和 having区别
WHERE语句在GROUP BY语句之前:SQL会在分组之前计算WHERE语句. HAVING语句在GROUP BY语句之后:SQL会在分组之后计算HAVING语句.