我的整体问题是:使用Redis for PubSub,当发布者将消息推送到某个频道的速度超过订阅者能够阅读它们时,消息会发生什么变化?
例如,假设我有:
我天真的假设是订阅者只会看到50%的消息发布到Redis上.为了测试这个理论,我写了两个脚本:
pub.py
queue = redis.StrictRedis(host='localhost', port=6379, db=0)
channel = queue.pubsub()
for i in range(10):
queue.publish("test", i)
time.sleep(0.5)
Run Code Online (Sandbox Code Playgroud)
sub.py
r = redis.StrictRedis(host='localhost', port=6379, db=0)
p = r.pubsub()
p.subscribe('test')
while True:
message = p.get_message()
if message:
print "Subscriber: %s" % message['data']
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
结果
sub.py
,然后紧接着pub.py
,我发现sub.py
实际上显示了所有的消息(1-10),一个接一个地延迟了1秒.我最初的假设是错误的,Redis正在排队消息.需要更多测试.pub.py
,然后在跑步前等了5秒sub.py
,我发现sub.py
只显示了消息的后半部分(5-10).我本来会假设这个,但鉴于我之前的结果,我会认为消息排队,这导致我得出以下结论......结论
剩下的问题
redis-cli info
命令查看排队的消息数(对于每个客户端/通道)?我正在使用该redis-cli
工具来观察redis-server延迟.这是一个例子:
ubuntu:~$ redis-cli --latency -h 127.0.0.1 -p 6379
min: 0, max: 15, avg: 0.12 (2839 samples)
Run Code Online (Sandbox Code Playgroud)
问题是,这些值究竟意味着什么?除了通过工具自己的帮助文档提供的内容之外,我很难找到相关文档.
我正在使用Python Pandas来处理两个数据帧.第一个数据框包含来自客户数据库(名字,姓氏,电子邮件等)的记录.第二个数据框包含域名列表,例如gmail.com,hotmail.com等.
当电子邮件地址包含第二个列表中的域名时,我试图从客户数据框中排除记录.换句话说,当他们的电子邮件地址域出现在域黑名单中时,我需要删除客户.
以下是示例数据帧:
>>> customer = pd.DataFrame({'Email': [
"bob@example.com",
"jim@example.com",
"joe@gmail.com"], 'First Name': [
"Bob",
"Jim",
"Joe"]})
>>> blacklist = pd.DataFrame({'Domain': ["gmail.com", "outlook.com"]})
>>> customer
Email First Name
0 bob@example.com Bob
1 jim@example.com Jim
2 joe@gmail.com Joe
>>> blacklist
Domain
0 gmail.com
1 outlook.com
Run Code Online (Sandbox Code Playgroud)
我想要的输出是:
>>> filtered_list = magic_happens_here(customer, blacklist)
>>> filtered_list
Email First Name
0 bob@example.com Bob
1 jim@example.com Jim
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试过的:
df1[df1['email'].isin(~df2['email'])
......但是对于我在这里描述的用例显然没有帮助.