小编inq*_*One的帖子

为什么p [:]设计为在这两种情况下工作不同?

p = [1,2,3]
print(p) # [1, 2, 3]

q=p[:]  # supposed to do a shallow copy
q[0]=11
print(q) #[11, 2, 3] 
print(p) #[1, 2, 3] 
# above confirms that q is not p, and is a distinct copy 

del p[:] # why is this not creating a copy and deleting that copy ?
print(p) # [] 
Run Code Online (Sandbox Code Playgroud)

以上确认p[:]在这两种情况下工作方式不同。是不是

考虑到在以下代码中,我希望直接使用p而不是的副本p

p[0] = 111
p[1:3] = [222, 333]
print(p) # [111, 222, 333]
Run Code Online (Sandbox Code Playgroud)

我觉得

del p[:] 
Run Code Online (Sandbox Code Playgroud)

与一致 …

python slice python-3.x

51
推荐指数
4
解决办法
3791
查看次数

使用Redis实现JMS/AMQP消息传递模式

这个问题是因为我碰到一些提到(如),有关使用邮件软件如ZeroMQ 非常久远的Redis,但我不断听到的Redis本身使用的通讯系统.因此,如果Redis与其他消息传递系统一起使用,那么当它作为消息传递系统使用时,它是否意味着Redis有一些严重的缺陷?

虽然我很清楚使用Redis进行缓存和发布/发布,但目前尚不清楚是否可以使用Redis 代替完整的消息系统,如JMS,AMQP或ZeroMQ.
仅仅依靠标准兼容性方面而只关注功能/特性,Redis是否为消息传递系统所需的所有消息传递模式/模型提供支持?

我所说的消息传递模式是:

  1. RPC/Request-reply( 使用ActiveMQ/JMS 的 示例和使用RabbitMQ/AMQP的另一个示例)
  2. 管道/工作队列(每次消息消耗一次和最多一次)
  3. 广播(每个人都订阅了频道)
  4. 组播(根据消费者的选择器过滤服务器上的消息)
  5. 任何其他消息模式?

如果是,那么Redis似乎同时解决了两个(可能更多)方面:缓存和消息传递.

我在由Java/Java EE服务器支持的Web应用程序的上下文中查看此内容.我不是从概念验证的角度来看这个,而是从大规模的软件开发角度来看.

Edit1:
用户:791406问了一个有效的问题:

"谁在乎redis是否支持这些模式; redis是否能满足您的SLA和QoS需求?"

我认为最好将这个细节作为问题的一部分,而不是在评论部分.

我目前的需求与SLA和QOS关系不大,更多的是选择我的工作(消息)工具,即使我的需求在未来(合理地)增长,我也可以使用.我首先从简单化的要求开始,我们都知道需求往往会增长.和NO,我不是在寻找一个工具,做这一切.我只是想知道Redis是否满足消息系统的预期要求,如ActiveMQ/RabbitMQ.当然,如果我的SLA/QOS需要极端/偏心,我需要一个特殊的工具来满足这一要求.例如:在某些情况下,由于特定的SLA要求,可以通过RabbitMQ选择ZeroMQ.我不是在谈论这种特殊要求.我专注于平均企业要求.

我害怕(基于我的一点理解)尽管redis可以用作当今我的消息传递需求的基本工具,但它可能是未来真正的消息传递工作的错误工具.我有使用ActiveMQ/RabbitMQ等消息传递系统的经验,并且知道它们可以用于简单到(合理)复杂的消息传递需求.

编辑2:

  1. redis网站提到"Redis经常被用作消息服务器"但是如何实现消息传递模式并不清楚.

  2. Salvatore sanfilippo提到Redis用户倾向于将其用作数据库,消息传递总线或缓存.它在多大程度上可以用作"消息传递总线"尚不清楚.

  3. 当我试图找出redis不支持的JMS的消息传递要求时,我遇到了Redis支持但JMS不支持的东西:模式匹配订阅,即客户端可以订阅glob样式模式以接收发送到的所有消息与给定模式匹配的通道名称.

结论:

我决定使用JMS来满足我的消息传递需求,并使用Redis进行缓存.

java messaging jms amqp redis

18
推荐指数
1
解决办法
5546
查看次数

使用HTML5 Server-sent-events(SSE)ReSTful?

我无法理解HTML5s Server-sent-events是否真的适合ReST架构.我知道并非HTML5/HTTP的所有方面都需要适合ReST架构.但我想知道专家,其中一半的HTTP是SSE(ReSTful一半或另一半!).

一种观点可能是它是ReSTful,因为从客户端到服务器有一个"初始"HTTP GET请求,剩下的只能被看作只是不同内容类型的部分内容响应("text/event-流")

发送的请求不知道响应(事件)会有多少响应?这是Restful吗?

问题的动机:我们正在开发应用程序的服务器端,我们希望同时支持ReST客户端(通常)和浏览器(特别是).虽然SSE适用于大多数HTML5浏览器客户端,但我们不确定SSE是否适合纯ReST客户端的支持.因此问题.

Edit1:正在阅读Roy Fielding的旧文章,他说:"换句话说,单个用户请求会导致潜在的大量服务器义务.因此,一个仁慈的用户可能会对发布者或代理产生不成比例的负载.在互联网上,我们没有为善意用户设计的奢侈品,因此在HTTP系统中我们称这种请求为拒绝服务攻击.... 这正是为什么没有标准机制用于HTTP中的通知 "

这是否意味着SSE不是Restful?

Edit2:正在浏览Twitter的REST API.虽然REST puritans可能会争论他们的REST API是否真的/完全REST,但Streaming和REST之间差异部分的标题似乎表明Streaming(甚至SSE)不能被认为是ReSTful!有人认为吗?

rest streaming html5 http server-sent-events

15
推荐指数
1
解决办法
4309
查看次数

WireGuard:如何从服务器向客户端推送路由和 dhcp 选项?

WireGuard 是否支持 VPN 服务器向其客户端推送路由和 DHCP 选项的方式,就像 OpenVPN 所做的那样:

push "route 10.0.2.0 255.255.255.0 " 

push "dhcp-option DNS 10.66.0.4"
Run Code Online (Sandbox Code Playgroud)

我有 100 多个客户端,它们动态地设置了与 VPN 服务器的 VPN 连接,我希望在它们连接到 VPN 服务器时安装这些路由和选项。

vpn openvpn wireguard

12
推荐指数
2
解决办法
2万
查看次数

为什么*在赋值语句和函数调用中的工作方式不同?

在Python中,varargs集合的工作方式似乎与赋值语句中的序列拆包方式完全不同。我试图了解这种可能造成混淆的差异的原因。我敢肯定有充分的理由,但这是什么?


# Example 1 with assignment statement
a, *b, c = 1,2,3,4
print(b) # [2, 3]

# Example 1 with function call
def foo(a, *b, c):
    print(b)
foo(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

该函数调用导致以下错误:

Traceback (most recent call last):
  File "<pyshell#309>", line 1, in <module>
    foo(1,2,3,4)
TypeError: foo() missing 1 required keyword-only argument: 'c'
Run Code Online (Sandbox Code Playgroud)

问题1:为什么不像在赋值语句中那样分配b?

Traceback (most recent call last):
  File "<pyshell#309>", line 1, in <module>
    foo(1,2,3,4)
TypeError: foo() missing 1 required keyword-only argument: 'c'
Run Code Online (Sandbox Code Playgroud)

问题2:为什么类型不同(列表与元组)?

python python-3.x

9
推荐指数
1
解决办法
205
查看次数

是否可以通过HTTP接收无序响应?

第8.1.2.2节流水线说:

"服务器必须按照收到请求的相同顺序发送对请求的响应".

所以,我想,如果我从浏览器发出多个AJAX请求,它们仍将按照服务器接收它们的顺序进行处理.

但后来,我正在阅读Alex Maccaw的这篇文章,他说:

"最后一个问题是与并行发送的Ajax请求.如果用户创建记录,然后立即更新同一记录,将同时发送两个Ajax请求,一个POST和一个PUT.但是,如果服务器在"创建"之前处理"更新"请求,它就会吓坏.它不知道哪条记录需要更新,因为还没有创建记录.

解决方案是管道Ajax请求,并以串行方式传输它们.Spine默认执行此操作,排队POST,PUT和DELETE Ajax请求,以便一次发送一个.只有在前一个请求成功返回后才发送下一个请求."

那么,我如何以编程方式创建Alex Maccaw提到的场景?

ajax asynchronous web-applications http

7
推荐指数
1
解决办法
5747
查看次数

使用 * 将值打包到元组中,就像函数参数打包一样

考虑一个定义为的函数:

def fun(a, *args):
    print(type(args), args)
Run Code Online (Sandbox Code Playgroud)

调用时,它将额外的位置参数打包为tuple

>>> fun(2, 3, 4)
<class 'tuple'> (3, 4)
Run Code Online (Sandbox Code Playgroud)

我想在函数参数之外实现类似的事情。所以,我想我可以通过扩展的可迭代解包来实现同样的事情,但它总是将东西打包成一个列表,而不是一个元组

# RHS is a tuple
>>> (a, *args) = (2, 3, 4)
>>> type(args)
<class 'list'>
>>> args
[3, 4]  #but args is not a tuple!
Run Code Online (Sandbox Code Playgroud)

使它与:

# RHS is a list
>>> (a, *args) = [2, 3, 4]
>>> type(args)
<class 'list'>
>>> args
[3, 4]
Run Code Online (Sandbox Code Playgroud)

我可以理解这也是PEP 中提出的方式。

我在问是否有另一种方法来实现我想要的。

当然,我可以args稍后通过以下方式转换为元组:

>>> args = …
Run Code Online (Sandbox Code Playgroud)

python tuples argument-unpacking python-3.x iterable-unpacking

7
推荐指数
1
解决办法
191
查看次数

什么是 servlet 处理中的“错误调度”?

javax.servlet.AsyncContext 接口javadoc说:

如果异步操作超时,容器必须运行以下步骤:

  • 在他们的onTimeout方法中调用所有AsyncListener注册ServletRequest到异步
    操作的实例。
  • 如果没有调用complete() 任何侦听器或任何dispatch()方法,则执行状态代码等于 的错误调度HttpServletResponse.SC_INTERNAL_SERVER_ERROR
  • 如果没有找到匹配的错误页面,或者错误页面没有调用 complete()或任何dispatch()方法,调用complete().

但是我在任何地方都找不到“错误调度”的含义。事实上,有一个Apache 错误也发出了同样的声音。(用他们的原话来说:“我也没有看到‘错误调度’的定义”)

但是当然,必须对此有明确的定义以及如何使用它。有人知道吗?

java servlets servletexception servlet-3.0 jakarta-ee

6
推荐指数
1
解决办法
6148
查看次数

我们应该在连接工厂上调用 setClientId() 吗?

这是在创建持久订阅的背景下。DefaultMessageListenerContainer
中有一个 setClientId() , SingleConnectionFactory 中有另一个setClientId() 。

我的理解是:

  • 持久订阅适用于消费者/订阅者。
  • 不同的消费者应该能够使用不同的客户端 ID。
  • 不同的消费者应该能够共享连接。
  • 每个消费者有一对 (ListenerContainer,Listener)。

因此,在 ListenerContainer 处 setClientId() 是有意义的。

但是,为什么在连接工厂级别会有 setClientId() ?

即使 SingleConnectionFactory 只有一个连接,该连接也可以由多个使用者跨多个会话共享。正确的 ?不用说,这对于 CachingConnectionFactory(从 SingleConnectionFactory 继承此方法)来说更危险。

扩展版本: 我们可以说不应该在 Single/CachingConnectionFactory 上使用 setClientId() 吗?DefaultMessageListenerContainer 的 setClientId() 中的以下语句使这一点变得更加必要:

此外,只有在原始 ConnectionFactory 尚未分配客户端 ID 的情况下,才能分配客户端 ID

因此,如果有人不小心在 CachingConnectionFactory 上设置了 ClientId,则将来在 DefaultMessageListenerContainer 上设置的客户端 id 将无法执行!

java spring jms spring-jms jakarta-ee

5
推荐指数
1
解决办法
6754
查看次数

Pandas 与 Numpy 索引:为什么索引排序存在根本差异?

麻木:

import numpy as np
nparr = np.array([[1, 5],[2,6], [3, 7]])
print(nparr)
print(nparr[0])    #first choose the row 
print(nparr[0][1]) #second choose the column
Run Code Online (Sandbox Code Playgroud)

给出预期的输出:

[[1 5]
 [2 6]
 [3 7]]

[1 5]

5
Run Code Online (Sandbox Code Playgroud)

熊猫:

[[1 5]
 [2 6]
 [3 7]]

[1 5]

5
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

   a  b
0  1  5
1  2  6
2  3  7

0    1
1    2
2    3
Name: a, dtype: int64

2
Run Code Online (Sandbox Code Playgroud)

将 Pandas 数据框中“索引”的默认顺序更改为列第一的根本原因是什么?这种一致性/直觉性的丧失对我们有什么好处?

当然,如果我使用该iloc函数,我们可以将其编码为类似于 Numpy 数组索引:

df = pd.DataFrame({
    'a': [1, 2, 3], …
Run Code Online (Sandbox Code Playgroud)

python numpy dataframe pandas

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