小编dgo*_*sen的帖子

Python Kombu消费者未通知rabbitmq消息(queue.get确实有效)

如果我运行以下代码,则永远不会触发传递给使用者的回调(测试).

但是,如果我密切关注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)

python amqp rabbitmq

4
推荐指数
1
解决办法
2287
查看次数

在后台运行pika ioloop或使用自定义ioloop

我觉得这应该不是那么困难,但到目前为止我没什么成功.

假设我有一个名为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),但这没有任何效果(没有任何反应). …

python multithreading amqp rabbitmq

4
推荐指数
2
解决办法
4628
查看次数

Google 可视化 API 示例中的“无效 JSON 字符串”

我大致遵循这个例子。但一定是在做一些愚蠢的事情......

服务器端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)

我知道整个线索是确保架构格式与数据格式匹配,但情况似乎确实如此。它必须是一些简单的东西。

javascript django json google-visualization

3
推荐指数
1
解决办法
9440
查看次数

Big-O和等号,滥用符号

维基百科说:

如上定义的陈述"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讨论页面没有太大的帮助要么.

big-o time-complexity

3
推荐指数
1
解决办法
545
查看次数

将C/C++回调传递给matlab引擎

我有一个C++文件:

  • 启动matlab引擎
  • 调用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文档中都没有引用此函数.那怎么用呢?

c++ matlab mex matlab-engine matlab-deployment

3
推荐指数
1
解决办法
1921
查看次数

分配给python中的不连续切片

在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)

编辑:我使用字符串作为一个简单的例子,但列表的解决方案(已经发布,哇)是我正在寻找的.谢谢.

python indexing matlab variable-assignment slice

2
推荐指数
1
解决办法
739
查看次数