如果我运行以下代码,则永远不会触发传递给使用者的回调(测试).
但是,如果我密切关注rabbitmq GUI,我确实会看到该消息被检索(但未被确认).所以看起来消费者正在收到消息,但不会将消息传递给我的回调.如果我将no_ack设置为true,则消息将从队列中消失,同样不再调用回调.
hn = "..."
usr = "..."
pwd = "..."
vh = "/"
port = 5672
rkey = "some.routing.key"
qname = "some-queue-name"
exchangeName = "MyExchange"
connection = BrokerConnection(hostname=hn,
userid=usr,
password=pwd,
virtual_host=vh,
port=port)
connection.connect()
ch = connection.channel()
# Create & the exchange
exchange = Exchange(name=exchangeName,
type="topic",
channel=ch,
durable=True)
exchange.declare()
# Temporary channel
ch = connection.channel()
# Create the queue to feed from
balq = Queue(name=qname,
exchange=exchange,
durable=True,
auto_delete=False,
channel=ch,
routing_key=rkey)
# Declare it on the server
balq.declare(); …Run Code Online (Sandbox Code Playgroud) 我觉得这应该不是那么困难,但到目前为止我没什么成功.
假设我有一个名为PikaClass的类,它包裹鼠兔并提供一些商业方法.
def PikaClass(object):
def __init__(self):
# connect to the broker
self.connection = pika.SelectConnection(<connection parameters>, self.on_connect)
# ..other init stuff..
def on_connect(self, connection):
# called when the connection has been established
# ..open a channel, declare some queues, etc.
def start(self):
# start the polling loop
self.connection.ioloop.start()
def foo(self, **kwargs):
# do some business logic, e.g., send messages to particular queues
Run Code Online (Sandbox Code Playgroud)
直观地说,这就是我想要实现的:用户创建一个实例PikaClass,在后台设置循环,然后通过调用某些业务方法与对象进行交互
p = PikaClass()
p.start()
bar = p.foo(..)
Run Code Online (Sandbox Code Playgroud)
问题是p.start()阻止并阻止主代码在调用start()后与对象交互.我的第一个想法是将调用包装在一个线程中:
Thread(target=p.start()).start()
bar = p.foo(..)
Run Code Online (Sandbox Code Playgroud)
但那仍然会阻止你永远不会到达p.foo(..).文档提到你不应该在线程之间共享连接,这样可能会在某处导致问题.
我也尝试使用AsyncoreConnection而不是SelectConnection,并直接调用_connect()(而不是使用ioloop),但这没有任何效果(没有任何反应). …
我大致遵循这个例子。但一定是在做一些愚蠢的事情......
服务器端Django查看代码:
data_table = gviz_api.DataTable(description)
data_table.LoadData(data)
json = data_table.ToJSon()
return json
Run Code Online (Sandbox Code Playgroud)
这些是从 pydev 调试器复制粘贴的变量的值:(我对每个描述字段类型使用字符串只是为了测试)
描述:
[("sensor","string", "Sensor name"),
("timestamp","string", "Time"),
("value","string", "Sensor value")]
Run Code Online (Sandbox Code Playgroud)
数据:
[['testsensor', '2011-05-09 16:06:43.936000', '22.0'],
['testsensor', '2011-05-09 16:56:23.367000', '23.0']]
Run Code Online (Sandbox Code Playgroud)
json(由 google api 生成):
{cols:[{id:'sensor',label:'Sensor name',type:'string'},{id:'timestamp',label:'Time',type:'string'},{id:'value',label:'Sensor value',type:'string'}],rows:[{c:[{v:'testsensor'},{v:'2011-05-09 16:06:43.936000'},{v:'22.0'}]},{c:[{v:'testsensor'},{v:'2011-05-09 16:56:23.367000'},{v:'23.0'}]}]}
Run Code Online (Sandbox Code Playgroud)
接收 json 的客户端 javascript 代码:
var json_table = new google.visualization.Table(document.getElementById('dataview'));
var json_data = new google.visualization.DataTable(data, 0.6);
json_table.draw(json_data, {showRowNumber: true});
Run Code Online (Sandbox Code Playgroud)
这会导致在构造 DataTable 对象(第二行)时出现以下错误:
Uncaught Error: Invalid JSON string: {cols:[{id:'sensor',label:'Sensor name',type:'string'},{id:'timestamp',label:'Time',type:'string'},{id:'value',label:'Sensor value',type:'string'}],rows:[{c:[{v:'testsensor'},{v:'2011-05-09 16:06:43.936000'},{v:'22.0'}]},{c:[{v:'testsensor'},{v:'2011-05-09 16:56:23.367000'},{v:'23.0'}]}]}
in default,table.I.js:152
Run Code Online (Sandbox Code Playgroud)
我知道整个线索是确保架构格式与数据格式匹配,但情况似乎确实如此。它必须是一些简单的东西。
如上定义的陈述"f(x)是O(g(x))"通常写为f(x)= O(g(x)).有些人认为这是对符号的滥用,因为使用等号可能会产生误导,因为它表明这种说法没有对称性.正如de Bruijn所说,O(x)= O(x ^ 2)为真但O(x ^ 2)= O(x)不是
我理解正式定义但不是de Bruin所说的.我试图理解O(x)= O(x ^ 2)或甚至O(x)是O(x ^ 2)的真正含义.
直观地,我会将其读作"具有复杂度x的函数类与具有复杂度x ^ 2的函数类相同".但这没有意义.
在Wikipedia讨论页面没有太大的帮助要么.
我有一个C++文件:
matlab_optimize()(在内部运行matlab优化器之一的已编译m文件)这很好用.我现在想把第二行改成
matlab_optimize(obj_fun)obj_fun()在我的C++代码中定义的函数在哪里,它本身将回调到其他代码中.基本上我希望内部matlab_optimize使用的matlab优化器使用我提供的函数指针作为目标函数.
我不能编译obj_fun()成一个独立的mex文件,因为我希望它与启动matlab引擎的c ++进程通信(驱动整个事情).
2009年的新闻组帖子似乎表明这是不可能的.然后,Matlab C++ Math Library Toolbox 似乎也能够做到这一点.
谷歌搜索也揭示了这个生成的片段:
/*
* Register a function pointer as a MATLAB-callable function.
*/
extern void mexRegisterFunction(void);
Run Code Online (Sandbox Code Playgroud)
这似乎正是我想要的,但文件来自2000,我发现在任何地方的matlab文档中都没有引用此函数.那怎么用呢?
在Matlab中我可以这样做:
s1 = 'abcdef'
s2 = 'uvwxyz'
s1(1:2:end) = s2(1:2:end)
s1 is now 'ubwdyf'
Run Code Online (Sandbox Code Playgroud)
这只是一般的例子:
A(I) = B
Run Code Online (Sandbox Code Playgroud)
其中A,B是向量,I索引向量和B长度与I相同.(暂时忽略矩阵).
Python中一般情况的pythonic等价物是什么?最好也应该在jython/ironpython上运行(没有numpy)
编辑:我使用字符串作为一个简单的例子,但列表的解决方案(已经发布,哇)是我正在寻找的.谢谢.