Python3Asyncio在并发任务之间共享资源



我有一个用Python3.5编写的网络应用程序,它利用了并行处理每个传入连接的pythons Asyncio。

在每次并发连接时,我都希望将连接的客户端数据存储在一个列表中。我担心,如果两个客户端同时连接(这是可能的(,那么两个任务都会试图同时写入列表,这肯定会引发问题。我该如何解决这个问题?

asyncio仅在屈服点(await表达式(上执行上下文切换,因此两个并行任务不会在相同的时间执行。

但是,如果竞争条件仍然存在(这取决于具体的代码结构(,则可以使用异步同步原语和队列。

您的问题中缺少很多信息。

  • 你的应用程序是线程化的吗?如果是,那么您必须将您的列表包装在threading.Lock
  • 您是否在请求处理程序中的写入(到列表(之间切换上下文(例如使用await(?如果是,那么您必须将您的列表包装在asyncio.Lock
  • 你做多处理吗?如果是,则必须使用multiprocessing.Lock
  • 您的应用程序是否分为多台机器?然后你必须使用一些外部共享数据库(例如Redis(

如果所有这些问题的答案都是,那么您就不必做任何事情,因为单线程异步应用程序无法并行更新共享资源。

相关内容

  • 没有找到相关文章

最新更新