我正在努力从 Celery 任务中获取结果。我的应用程序入口点如下所示:
from app import create_app,celery
celery.conf.task_default_queue = 'order_master'
order_app = create_app('../config.order_master.py')
Run Code Online (Sandbox Code Playgroud)
现在,在启动应用程序之前,我启动 RabbitMQ 并确保它没有队列:
root@3d2e6b124780:/# rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
root@3d2e6b124780:/#
Run Code Online (Sandbox Code Playgroud)
现在我开始应用程序。启动后,我仍然在 RabbitMQ 中看到没有队列。当我从应用程序启动任务时,jobs.add_together.delay(2, 3)我得到任务 ID:
ralfeus@web-2 /v/w/order (multiple-instances)> (order) curl localhost/test
{"result":"a2c07de4-f9f2-4b21-ae47-c6d92f2a7dfe"}
ralfeus@web-2 /v/w/order (multiple-instances)> (order)
Run Code Online (Sandbox Code Playgroud)
那一刻我可以看到我的队列有一条消息:
root@3d2e6b124780:/# rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name messages
dd65ba89-cce9-3e0b-8252-c2216912a910 0
order_master 1
root@3d2e6b124780:/#
Run Code Online (Sandbox Code Playgroud)
现在我启动 Celery 工作者:
ralfeus@web-2 /v/w/order (multiple-instances)>
/usr/virtualfish/order/bin/celery -A main_order_master:celery worker --loglevel=INFO …Run Code Online (Sandbox Code Playgroud) 我正在尝试进行Edge扩展,它将与除网页原点之外的其他服务器进行通信.然而,沟通似乎失败了.
当源是外部的并且跨域请求目标在Intranet中时,我读到了有关跨域请求的问题.所以我将内联网服务器暴露在互联网上.但这没有帮助.
我试图尽可能简单地运行fetch()并获得此结果:
fetch(" https://fake.domain.info/api/browser/authenticate/ ").then((response)=> {console.log(response);}).catch((error)=> {console.日志(误差);})
[对象承诺]:{}
[object Error]:{description:"无法获取",消息:"无法获取",编号:-2147418113}
我检查了调试窗口中的网络流量,发现了奇怪的记录:
名称协议方法结果内容类型接收时间发起者 https://fake.domain.info/api/browser/authenticate/ HTTPS GET 200(来自缓存)0 s
我真的不明白为什么会出现"(来自缓存)".所以用WireShark检查了请求.我发现的是这个:
61 3.004629 xxx.xxx.xxx.xxx 192.168.124.144 TLSv1.2 501服务器Hello,证书,服务器密钥交换,服务器Hello完成
62 3.004666 192.168.124.144 xxx.xxx.xxx.xxx TCP 54 51965→443 [ACK] Seq = 207 Ack = 1908 Win = 261632 Len = 0
...
86 3.010645 192.168.124.144 xxx.xxx.xxx.xxx TCP 54 51965→443 [FIN,ACK] Seq = 207 Ack = 1908 Win = 261632 Len = 0
87 3.011785 xxx.xxx.xxx.xxx 192.168.124.144 TCP 60 443→51965 [ACK] Seq = 1908 Ack = 208 …
我试图排除要添加到数据库中的实体(如果它们已经存在)。因此,我认为newBillInstances.Except(dbContext.BillInstances)这是最好的方法。但是,它完全不起作用(不排除任何实体),因为List<string>它可以完美地工作。
我读了这个讨论和实际能解密.Except()在MSDN。它指出.Except()要实现的类应IEqualityComparer<T>使用默认比较器。
实际上,MSDN文章并未完全描述两个实例的比较过程。我仍然不明白为什么Equals()和GetHashObject()都必须被覆盖。
我已经实现了IEqualityComparer<BillInstance>接口,并在两种方法中都设置了断点,但是在调用.Except(IEnumerable)它时并未使用。只有当我更改为时,我才会.Except(IEnumerable, new BillInstanceComparer())咳嗽,GetHashCode()但咳嗽不会中断Equals()。
然后,我IEqualityComparer<BillInstance>在BillInstance类中实现了正确的方法,并期望在使用时可以使用它,.Except(IEnumerable)但是两种方法都不会造成中断。
所以我有两个问题:
.Except(IEnumerable)?Equals()根本不使用?是否仅在两个实例的哈希码相同的情况下使用?我正在寻找一种new在PHP中重载运算符的方法.我已经搜索过,似乎不可能.但可能有不同的方式来实现我的需要.
我在不同的文件中定义了一堆类.为了创建类的实例,我必须首先包含该文件.但是我不想在每个new指令之前跟包含函数的调用文件.我更喜欢new重新定义运算符,以便在创建类实例之前包含必要的文件.
有没有优雅的方法来实现这一目标?
我正在尝试使用自定义命令按钮设置行的状态字段。网格数据源传输定义如下:
transport: {
read: {
url: "/agent/AgentList",
type: "POST",
dataType: "json",
data: addAntiForgeryToken
},
update: {
url: "/agent/UpdateAgent",
type: "POST",
dataType: "json",
data: addAntiForgeryToken
}
},
Run Code Online (Sandbox Code Playgroud)
自定义命令定义如下:
{
command: [
{
name: "accept",
visible: function(dataItem) {
return dataItem.StatusId === 1;
},
text: "@T("Ralfeus.Agent.Accept")",
click: function(e) {setOfferResponse(this, e, 2);}
}
]
}
Run Code Online (Sandbox Code Playgroud)
实际设置字段的函数定义如下:
function setOfferResponse(grid, sender, response) {
sender.preventDefault();
var dataItem = grid.dataItem($(sender.currentTarget).closest("tr"));
dataItem.StatusId = response;
grid.editRow($(sender.currentTarget).closest("tr"));
grid.saveChanges();
}
Run Code Online (Sandbox Code Playgroud)
我期望 saveChanges() 调用触发数据源传输的更新方法。但是,它既不会向服务器发出任何请求,也不会报告错误。
我还尝试将 grid.saveChanges() 替换为 grid.dataSource.sync() (顺便说一下 - 有什么区别?)正如这里建议的那样 …
c# ×1
celery ×1
cross-domain ×1
flask ×1
https ×1
ienumerable ×1
kendo-grid ×1
linq ×1
oop ×1
php ×1
python ×1
rabbitmq ×1