我有一个用Python3.5编写的网络应用程序,它利用了同时处理每个传入连接的蟒蛇Asyncio。
在每个并发连接上,我想将连接的客户端数据存储在列表中。我担心如果两个客户端同时连接(这是可能的话),那么两个任务都会尝试同时写入列表,这肯定会引发一个问题。我该如何解决这个问题?
答案 0 :(得分:2)
asyncio仅在 yield points (await
表达式)上进行上下文切换,因此两个并行任务不会在相同的时间执行。
但如果竞争条件仍然存在(取决于具体的代码结构),您可以使用asyncio synchronization primitives和queues。
答案 1 :(得分:2)
您的问题中缺少许多信息。
# 2.0.0+ syntax
df <- createDataFrame(data.frame(col1=c(1, 2, 2, 5, 6, 5)))
collect(select(df, countDistinct(df$col1)))
## count(DISTINCT col1)
## 1 4
。threading.Lock
)?如果是,那么您必须将列表包装在await
。asyncio.Lock
如果所有这些问题的答案都是 no ,那么您就不必做任何事情,因为单线程异步应用无法并行更新共享资源。